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

リモート ユーザーのログイン シェル (user2server2) が である場合bash、経由で呼び出されると、対話的でないときでも (つまり、指定したを単に解釈するとき)、bashが読み取りおよび解釈する(およびリモート システム上の または同等のものも) ことに注意してください。~/.bashrc/etc/bash.bashrcssh/bin/cat > user2@server2:/......./test.sql.gz

のものが、または(からの~/.bashrc)のようなことをしないように注意してくださいsttymesgmesgsysvinit-utils多くの Linux ディストリビューションに見られるように、 を実行すると表示されるのとまったく同じメッセージを出力することが知られています: | mesg n)、または 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また、と を一時的に削除することもできます。~/.bashrc現時点では、 からのメッセージssh、 で実行されたコマンドからのメッセージ、おそらくそのコマンド ライン~/.bashrcを解釈する際のリモート シェルによるメッセージ、そしてコマンドによるメッセージが表示されており、何が何だかわかりにくくなっています。cat ...catmysqldump

関連情報