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
のログインシェルが(オン)である場合は、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