開発ブログ
Git、CSS、HTML、正規表現など、入門者がつまづきそうなポイントを中心に、役立ち情報発信します。。

rsync で ssh 接続するオプション

最終更新:2018-10-28 by Joe

Linux やMacなどでも、ファイル転送に便利な「rsync」。でも、SSHで接続する際オプションを忘れて、何回もぐぐってしまうので、こちらに網羅的にまとめます。

rsync で SSH 接続するオプション「-e ‘ssh ‘ 」

rsync といえば、SSH接続ですが、書式がやや覚えにくいです。ssh 接続には、「-e」もしくは  「-rsh」というオプションから、SSH接続コマンドを追加することで、リモート接続前に指定したコマンドを行ってくれます。

SSH プライベートキーを指定する rsync コマンド

当然ですが、リモート側にSSHが起動している、かつSSH接続できる状態に準備が整っている事が前提です。SSHのプライベートキーを直接指定します。まだ SSH config を設定してないとき時はこれが必要ですが、普通は config を設定した利用が多いと思います。

SSHでは、キーの指定は -i オプションでした。

$ rsync -e 'ssh -i <プライペートキー>' <ユーザ名>@<サーバーアドレス>:<転送元ファイル> <送信先ファイル>

SSH で、ポート(port)を指定する

ポートを指定します。-e オプションにより、SSH接続コマンドを書き込みます、ほぼ通常の ssh 接続とおなじコマンドを記述することになります。

SSHでは、キーの指定は -p オプションでした。

$ rsync -e 'ssh -p <ポート番号>' <ユーザ名>@<サーバーアドレス>:<転送のファイル> <転送先のファイル>

SSH config を設定済みの時

SSH config に宛先とキーの指定を書き込ミが終わっていれば、SSHでサーバー接続するときの容量で、リモートの宛先を指定できます。

$ rsync xxxx:<ファイル> <転送先のパス>

-e によってSSH接続シェルをそのまま記述できるんだね。

rsync、man ページの -e オプションの ssh 接続

rsync の man ページ(こちらでも見れます)から、-e オプションについて抜粋しておきます。(日本語は編集者訳です)

-e, --rsh=COMMAND

This option allows you to choose an alternative remote shell program to use for communication between the local and remote copies of rsync. Typically, rsync is configured to use ssh by default, but you may prefer to use rsh on a local network.

訳:このオプションで、rysnc のローカルとリモート通信に使うモートシェルプログラムを選べるようになります。多くの場合、rsync はデフォルトでSSHを使うように設定されてることがほとんどですが、rsh をローカルネットワークで使いたい事もあるかもしれません。

If this option is used with [user@]host::module/path, then the remote shell COMMAND will be used to run an rsync daemon on the remote host, and all data will be transmitted through that remote shell connection, rather than through a direct socket connection to a running rsync daemon on the remote host.

訳:もし [user@]host::module/path とともにこのオプションを使えば、rsync デーモンに対する直接のソケット接続を経由するのではなく、COMMANDで指定したリモートシェル が、リモートホスト上でrsync デーモンを走らせ、データはその接続を通して転送されます。

[/section]

rsync ssh の例文

ドライランでログ出力、ポート2222で接続し、ローカルからリモートに転送します。

$ rsync -rvn -e 'ssh -p 2222' ./pictures/* username@example.jp:~/pictures

アーカイブモード(-rlptgoD)で、リモートからダウンロード.

$ rsync -a my-server:~/readme.txt .

ローカルにないファイルを削除。(通常はファイル削除されない)

$ rsync --delete . example-server:/var/www/html/images

参考リンク

Man ページの複製です。分量がごっついです。

 

閉じる