私は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
のものが、または(からの~/.bashrc
)のようなことをしないように注意してくださいstty
mesg
mesg
sysvinit-utils
多くの Linux ディストリビューションに見られるように、 を実行すると表示されるのとまったく同じメッセージを出力することが知られています: | mesg n
)、または 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