私は試した:
rsync -v -v -e 'ssh -p YY' ./testfile me@XXXXX:/home
エラーメッセージ
opening connection using: ssh -p YY -l me 146.6.84.206 rsync ->-server -vvve.s . /home
[sender] make_file(testfile,*,0)
send_file_list done
send_files starting
server_recv(2) starting pid=17537
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600)[sender=3.0.6]
_exit_cleanup(code=12, file=io.c, line=600): about to call exit(12)
これはうまくいきます:
ssh -p YY me@XXXXX
問題は、sshd
が実行されていないことも、ポートYYがファイアウォールで保護されていることでもないことを示唆しています。とにかくチェックしました。
他にどんな問題があるのでしょうか?
編集:問題は「自己解決」であったようです。翌日は複製できませんでした。ローカルコンピューターを起動しました。おそらく、私は前回とは異なるIPアドレスを持っていました。そして今、rsyncは魔法のように動作します。私はそれが消えることを考慮してそれが何であったかもしれないかについての推測に感謝します。
存在しないリモートパスを指定した場合にも、このエラーが発生する可能性があります。
OS Xでこのエラーが発生しました:
$ rsync -avz public/ static:apps/myapp.com
building file list ... done
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /BuildRoot/Library/Caches/com.Apple.xbs/Sources/rsync/rsync-47/rsync/io.c(453) [sender=2.6.9]
目的地のパスを間違えて入力するだけでした。 apps
dirは存在しませんでした。それをstatic:sites/myapp.com
に変更したとき(sites
dir didが存在する)、エラーはなくなりました。
パスの最後のディレクトリが存在しない場合は問題ありません(static:sites/mynewapp.com
を実行できます)が、先行するディレクトリは既に存在している必要があります。
ターゲットホストにrsync
がインストールされていないときにこのエラーが発生しました。私の場合のエラーメッセージには、rsync: command not found
も記載されています。シンプルな
Sudo apt-get install rsync
ターゲットホストで問題を解決しました。
リモートエンドのログインスクリプトはstdoutでゴミを生成しますか?でこれを確認してください
ssh -p YY me@XXXXX /bin/true > out.txt
out.txt
にデータが含まれている場合、.profile
または.bashrc
で問題のステートメントを特定し、それらをラップします
if [ ! -t 1 ]; then
echo garbage
fi
Sshバイナリへのフルパスを入力する必要がある場合があります。
rsync -v -v -e '/usr/bin/ssh -p YY' ./testfile me@XXXXX:/home
他にも考えられる原因がありますが。
私はこのエラーを見ていました:
rsync -e 'ssh -v'
debug1: Exit status 11
...
rsync error: error in rsync protocol data stream (code 12) at /BuildRoot
/Library/Caches/com.Apple.xbs/Sources/rsync/rsync-51/rsync/io.c(453)
[sender=2.6.9]
リモートホストにsshできて、ディスクスペースが不足していることがわかりました。
このエラーは、リモートシステムでのrsyncへのパスが、ローカルシステムが想定しているものと異なる場合にも発生する可能性があります。 -vv(またはさらにvs)を指定すると、何が起こっているかを確認できます。これが問題になる場合は、-rsync-pathオプションを使用してrsyncへのリモートパスを指定できます。