stdin : tty에 없음

stdin : tty에 없음

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.bashrcssh/bin/cat > user2@server2:/......./test.sql.gz

의 콘텐츠가 또는 ( from) 과 같은 작업을 ~/.bashrc수행하지 않는지 확인하세요.sttymesgmesgsysvinit-utils: | mesg n많은 Linux 배포판에서 볼 수 있듯이 ) 를 실행하거나 stdin이 터미널 [ -t 0 ]이고 쉘이 대화형( case $- in (*i*) ...;; esac) 인지 확인한 후에만 표시되는 것과 정확히 동일한 메시지를 출력합니다 .

원격 사용자의 로그인 쉘이 csh또는 인 경우 호출 여부에 관계없이 비대화형 쉘을 포함하여 각 쉘에 대한 및 및 설명을 tcsh살펴보십시오 (그러나 따라서 일반적으로 무조건 아무 작업도 수행하지 않습니다 )..cshrc.tcshrczsh~/.zshenvsshtty

이로 인해 명령이 실패하지는 않으며 단지 잘못된 메시지만 표시됩니다.

명령이 실패하는 이유는 다음과 같습니다.

 /bin/cat > user2@server2:/......./test.sql.gz

user2@server2:자신의 홈 디렉토리에 호출되는 디렉토리가 없으면 의미가 없습니다 .user2server2

이것이 아마도 오류의 원인일 것입니다.

 : No such file or directory

불만을 표시하는 "파일 또는 디렉터리"가 "비어 있는" 것처럼 보인다는 사실은 명령줄 어딘가에 캐리지 리턴이 숨겨져 있음을 의미합니다.

원하는 것은 이며 /bin/cat > /path/to/output/file/on/server2/test.sql.gz, /path/to/output/file/on/server2디렉토리가 미리 존재해야 합니다.

현재 우리는 에서 실행 중인 명령의 메시지를 보고 있기 때문에 -v및 를 제거하고 싶을 수도 있습니다 . 아마도 해당 명령 줄을 해석할 때 원격 셸에서 보낸 메시지 이므로 무엇을 확인하기 어렵습니다.~/.bashrcssh~/.bashrccat ...catmysqldump

관련 정보