機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

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

プログラミング

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

エックスサーバー でやろうと思ってたのですが、後述のバグのせいでできなかったので、最近契約して全然弄ってない[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はポート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を使いました。

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

外部(WAN)からSSH接続出来ない原因は意外なところに
WP-CLIでサイトアドレスとWordPress アドレスのURLをSSH経由で変更
Ubuntu(or 以外)からWindowsへSSH
Linux/ubuntu SSH経由でリモートリーにGUIソフトウェアを開く
virtualboxのkali linuxでSSHフォワーディング及びファイル共有ができなかった件
virtualboxで共有フォルダ/ポートフォワーディング/SSHフォワーディングを設定してホスト完結のRails開発環境を構築しよう
SSHでのrsyncをcronとexpectを使って完全に自動化する


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu