プログラミング

rsyncを使ってSSH経由でリモートサーバーにフォルダやファイルを再帰的にアップロードする

今回はrsyncの使い方についてです。
ちなみに僕は今回のこの検証はBash on ubuntu on windowsでやっているので、Bash on ubuntu on windows使ってる人でも問題なく使えます。

[xserver]でやろうと思ってたのですが、後述のバグのせいでできなかったので、最近契約して全然弄ってない[conoha]でやってみたいと思います。

rsyncの使い方

リモートのsrc配下をローカルのdstに同期
$ rsync -av -e ssh [user]@[host]:./src/ dst
ローカルのsrc配下をリモートdstに同期
$ rsync -av -e ssh ./src/ [user]@[host]:dst

conohaのVPSにrsyncする

こんな感じでできます。

rsync -av -e "ssh" -r "/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/" root@YOUIPADDR:/root/lib/contacam

ちなみにこの例では、contacamで撮影された動画を自動でサーバーにアップロードする、という想定です。

侵入者がパソコンを壊したとか、火事でパソコンも燃えちゃったとかでも、あとで動画が確認できるわけです。安心。

:~/lib# ls contacam/2018/01/31/確認済み/
det_2018_01_31_08_23_53.gif  det_2018_01_31_08_24_12.gif  det_2018_01_31_08_26_38.gif  det_2018_01_31_08_28_57.gif  rec_2018_01_31_16_17_52.mp4
det_2018_01_31_08_23_53.mp4  det_2018_01_31_08_24_12.mp4  det_2018_01_31_08_26_38.mp4  det_2018_01_31_08_28_57.mp4

はい、ちゃんとフォルダもファイルもバックアップされていますね。

xserverにrsyncする

rsync -av -e "ssh -p 10022 -i ~/.ssh/yuis.key" -r "/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/01/31" yuis@sv2031.xserver.jp:/home/yuis/yuis.xsrv.jp/public_html/contacam/

成功していないのでできないかもしれません。たぶできます。.bashrcがごちゃごちゃしていなければ。

エラー1:Permission denied (publickey,gssapi-keyex,gssapi-with-mic). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]

Permission denied (publickey,gssapi-keyex,gssapi-with-mic). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]

このエラーの原因は、SSH接続の設定がちゃんとできていないことにあるようです。
例えば、ポートが22ではなく10022なのに、それを設定していなかったり、秘密鍵ファイルが必要なのに設定していなかったり。

僕は[xserver]を使っているので、xserverを例にして説明すると、xserverはポート10022で、公開鍵暗号方式です。

なので、rsyncのコマンドはこんな感じになります。

rsync -av -e "ssh -p 10022 -i ~/.ssh/yuis.key" -r "/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/01/31" yuis@sv2031.xserver.jp:/home/yuis/yuis.xsrv.jp/public_html/contacam/

これだと前述のエラーがでます。

rsync -av -e "ssh" -r "/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018/01/31" yuis@sv2031.xserver.jp:/home/yuis/yuis.xsrv.jp/public_html/contacam/

エラー2:protocol version mismatch — is your shell clean?

protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(180) [sender=3.0.7]

このエラーの原因は、.bashrcです。

(根本的な解決策は)ないです。

解決策としては、以下を参考にして、どうぞ。

rsyncは.bashrcファイルを持つリモートサーバでは動作しません。

ローカルクライアントでは、rsyncを実行すると次のようになります。

protocol version mismatch — is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(180) [sender=3.0.7]

.bashrc出力テキストのコマンドを削除するか、出力を/ dev / nullにパイプすることで、これを修正できます。

読んでわかるように、.bashrcを削除するか、無駄なコードを削除してみるか、/dev/nullにパイプ(よくわからない)すればいいらしいです。

僕はこれが全部やりたくなかったので、仕方なくconohaを使いました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です