~/blog/recursively-uploading-files-and-folders-to-remote-server-via-ssh-using-rsync
Published on

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

2882文字5分で読めます–––
閲覧数
Authors
  • avatar
    Name
    Shou Arisaka nyapp.buzz/shou
    short bio
    Z世代の情報技術者。Next.jsで自作SNSを個人開発中。

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

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

rsyncの使い方

リモートのsrc配下をローカルのdstに同期 rsyncavessh[user]@[host]:./src/dstローカルの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を使いました。

avatar

Shou Arisaka

情報技術者 / Z世代プログラマー / SaaSアプリやSNSを開発
今すぐ話そう!

15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。

Created with Fabric.js 5.2.4 何かご質問がありますか?