SSH에서 아래 명령을 사용하여 server1에서 server2로 백업을 만들려고 합니다.
[user1@server1 ~]$ mysqldump -u dbuser -p"dbpwd" --opt dbname \
| gzip -c \
| ssh -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/...../known_hosts \
-l deploy \
-i /...../id_rsa \
-v user2@server2 \
"/bin/cat > /.../test.sql.gz" \
2>&1
아래와 같은 오류가 발생했습니다.
debug1: Sending command: /bin/cat > -t user2@server2:/..../test.sql.gz
stdin: is not a tty
/bin/cat: user20@server2:/..../test.sql.gz
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
: No such file or directory
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 265040, received 2552 bytes, in 0.0 seconds
Bytes per second: sent 6736670.0, received 64865.6
debug1: Exit status 1
mysqldump: Got errno 32 on write
누구든지 이 문제를 해결할 수 있나요?
업데이트
백업 명령에서 'user2@server2'와 'deploy -i'를 제거하고 실행했습니다. 아래 메시지가 표시됩니다.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: /bin/cat > -t /....../test.sql.gz
stdin: is not a tty
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
/bin/cat: /......./test.sql.gz: No such file or directory
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 248608, received 2536 bytes, in 0.1 seconds
Bytes per second: sent 4628197.5, received 47211.3
debug1: Exit status 1
mysqldump: Got errno 32 on write
답변1
원격 사용자( user2
on server2
) 의 로그인 셸이 이면 호출될 때 대화형이 아닌 경우에도( 사용자가 제공한 것을 단지 해석하는 경우와 같이 ) 읽고 해석합니다 bash
( 원격 시스템에서 가능하거나 이에 상응하는 것). .bash
~/.bashrc
/etc/bash.bashrc
ssh
/bin/cat > user2@server2:/......./test.sql.gz
에 있는 것들이 또는 ( from에서 ~/.bashrc
) 같은 일을 하지 않도록 하세요.stty
mesg
mesg
sysvinit-utils
많은 Linux 배포판에서 볼 수 있는 것처럼 )을 실행하여 볼 수 있는 것과 정확히 동일한 메시지를 출력하거나 : | mesg n
stdin이 터미널 [ -t 0 ]
이고 쉘이 대화형인지 확인한 후에만 출력하는 것으로 알려져 있습니다( case $- in (*i*) ...;; esac
).
원격 사용자의 로그인 셸이 csh
또는 인 경우 호출 여부에 관계없이 비대화형 셸을 포함하여 모든 셸에서 해석되는 및 및 for를 살펴 tcsh
보세요 (그러나 따라서 일반적으로 작업을 수행하지 않음). 무조건 )..cshrc
.tcshrc
zsh
~/.zshenv
ssh
tty
이로 인해 명령이 실패하는 것이 아니라 가짜 메시지만 표시된다는 점에 유의하십시오.
하지만 명령이 실패하는 원인은 다음과 같습니다.
/bin/cat > user2@server2:/......./test.sql.gz
on user2@server2:
의 홈 디렉토리에 호출되는 디렉토리가 없으면 의미가 없습니다 .user2
server2
아마도 이것이 오류의 원인일 것입니다.
: No such file or directory
불평하는 "파일 또는 디렉터리"가 "비어 있는" 것처럼 보인다는 사실은 명령줄 어딘가에 캐리지 리턴 문자가 숨겨져 있음을 의미합니다.
원하는 것은 이며 /bin/cat > /path/to/output/file/on/server2/test.sql.gz
, /path/to/output/file/on/server2
디렉토리가 미리 존재해야 합니다.
또한 현재로서는 , 에서 실행되는 명령, 원격 셸이 해당 명령줄을 해석할 때 명령 에 의해 명령 에 의해 실행되는 메시지가 표시되는 것처럼 일시적 -v
으로 및 를 제거할 수도 있습니다. 무엇이 무엇인지 확인하세요.~/.bashrc
ssh
~/.bashrc
cat ...
cat
mysqldump