質問
Mac AとMac Bのデータを保存するサーバーがあります。
rsyncを使用して、Mac間でファイルを更新し続けます。
次のコードの実行に失敗しました
#!/bin/zsh
# to copy files from my server to my folder
rsync -Pav $Masi:~/private/ ~/Dropbox/Courses/math/
# to copy files from my folder to my server
rsync -Pav ~/Dropbox/Courses/math $Masi:~/private/
次のエラーメッセージが表示されます
ssh: connect to host port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at io.c(600) [receiver=3.0.5]
ssh: connect to host port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.5]
scpキーを使用しているので、問題なくscpを使用できるため、接続が機能するはずです。
サーバーとMacの1つでrsyncを使用するにはどうすればよいですか
解決
これまで多くのことをしていました。テストを実行したところ、いくつかの提案がありました。
- user @ hostパターン全体を綴る
- 最初にrsyncを使用せずにssh接続を実行します。最初に指紋を承認する必要がある場合があります
- 拡張属性を保護するフラグを渡さないようです。これにより、OS Xで破損したファイルが生成される可能性があります。リソースフォークが必要ない場合は問題ありませんが、ほとんどの場合は必要です。
テストケース:
$ rsync -Pav ~/Desktop/ me@remote.example.com:~/rsyc-test
この場合、〜/ Desktop内のすべてのファイルは、私のホームディレクトリのリモートホストにコピーされました。ディレクトリ「rsyc-test」は存在しなかったため、私のために作成されました。デスクトップに.appがありましたが、驚くほどうまくいきました。いくつかの.weblocファイルでさえ、それを作成して動作しているように見えますが、私は信頼していません。
-Eフラグを追加することを強くお勧めします
-E, --extended-attributes Apple specific option to copy extended attributes, resource forks, and ACLs. Requires at least Mac OS X 10.4 or suitably patched rsync.
新しいテストを実行し、Interarchyブックマークをデスクトップに移動しました。実際、リソースフォークなしでコピーされた場合、これらが壊れることがわかります。 -Eを使用しない場合と-Eを使用した場合、xferedデータには152バイトの差があります。リモートマシン上の最初のファイルは機能せず、2番目に転送されたファイルは機能しました。
私は助けることができませんが、あなたの例ではあなたのパスの1つが〜/ Dropboxであることに気付くので、これはすべて問題ではないかもしれません未来。
また、最終目標がデータのミラーである場合、-deleteフラグを送信していません。最終目標が継続的に成長し、ソースにあったすべてを保持するバックアップである場合、それを取得していません、--deleteの欠如は良いことです。
その他の注意:
これらの愚かな.DS_Storeファイルを除外できます
--exclude '.DS_Store'
真のミラーになるようにrsyncを設定することもできます。そのため、他のコマンドを実行する必要はありません。詳細についてはmanページを参照してください。
ラップトップのデスクトップをリモートマシンに押し出すための最後の作業コマンド:
$ rsync -PEav --delete --exclude '.DS_Store' ~/Desktop/ me@remote.example.com:~/rsycn-test
他のヒント
「$ Masi」をチェックします。それはあなたが到達しようとしているホスト名ですか?
次のコマンドを実行してデバッグします。
rsync -e 'ssh -v' -Pav $Masi:~/private/ ~/Dropbox/Courses/math/
接続が拒否されましたは通常、リモート(ファイアウォールなど)への接続に問題がある場合に発生します。
あなたの場合、問題は $ Masi
変数が空であることです。変数でない場合は、 Masi
を使用します。
このエラーごと:
ssh:
ホストポート22への接続:接続が拒否されました
host
の単語の後にある二重のスペースに注意してください。
ホストに接続メッセージは、どのホストに接続しているかを示していないため、空のホストに接続しようとしています。そのため、ホスト名のタイプミスのように聞こえます。