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
원격 사용자 server2
의 로그인 셸이 (on) 인 경우 bash
호출 시 대화형이 아니더라도(예: 제공한 내용을 해석하는 경우와 같이 ) 주의 깊게 bash
읽고 해석 하십시오(원격 시스템에서 이에 상응하는 내용일 수 있음).~/.bashrc
/etc/bash.bashrc
ssh
/bin/cat > user2@server2:/......./test.sql.gz
의 콘텐츠가 또는 ( from) 과 같은 작업을 ~/.bashrc
수행하지 않는지 확인하세요.stty
mesg
mesg
sysvinit-utils
: | mesg n
많은 Linux 배포판에서 볼 수 있듯이 ) 를 실행하거나 stdin이 터미널 [ -t 0 ]
이고 쉘이 대화형( case $- in (*i*) ...;; esac
) 인지 확인한 후에만 표시되는 것과 정확히 동일한 메시지를 출력합니다 .
원격 사용자의 로그인 쉘이 csh
또는 인 경우 호출 여부에 관계없이 비대화형 쉘을 포함하여 각 쉘에 대한 및 및 설명을 tcsh
살펴보십시오 (그러나 따라서 일반적으로 무조건 아무 작업도 수행하지 않습니다 )..cshrc
.tcshrc
zsh
~/.zshenv
ssh
tty
이로 인해 명령이 실패하지는 않으며 단지 잘못된 메시지만 표시됩니다.
명령이 실패하는 이유는 다음과 같습니다.
/bin/cat > user2@server2:/......./test.sql.gz
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