rsyncで公開鍵を指定してデータ転送する方法

ssh経由でrsyncを利用する際に、ssh鍵認証かつsshポート22以外に接続する方法。

コマンド

rsync -avz -e "ssh -p SSHポート番号 -i SSH秘密鍵ファイルパス" 送信元 username@hostname:~/dest/

例)
rsync -avz -e "ssh -p 2345 -i /c/sshkey/id_rsa" /c/develop/src/ hoge@192.168.1.10:~/dest/

公開鍵をリモート環境に保存、ローカルの秘密鍵とリモートの公開鍵で認証を行うので、ネットワーク上にパスワードが流れることがなく、セキュリティリを高めることができます。

ローカル側での設定

ローカルで秘密鍵と公開鍵のペアを生成し公開鍵をリモートに保存します。
リモートで鍵を生成し、秘密鍵をローカルに転送することも可能ですが、転送中に秘密鍵が漏れると、
公開鍵認証の意味がなくなってしまうので、ローカル側で生成したものを使用するようにします。

リモートのユーザー名 : hoge
リモートのホスト名 : example.com
リモートのディレクトリ名 : /home/hoge/
リモートのSSHポート番号 : 20022
ローカル側で秘密鍵と公開鍵のペアを生成
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #「Enter」を押す
Enter passphrase (empty for no passphrase): # 秘密鍵パスフレーズを入力
Enter same passphrase again: # もう一度

他のユーザーに見られないようにパーミッションを変更

$ chmod 600 .ssh/id_rsa

リモートに公開鍵を転送

$ scp -P 20022 .ssh/id_rsa.pub hoge@example.com:/home/hoge/.ssh/
hoge@example.com's password: # リモートのパスワードを入力

リモート側での設定

他のユーザーに見られないようにパーミッションを変更(未設定の場合)
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
転送されてきた公開鍵をリネーム
$ mv .ssh/id_rsa.pub .ssh/authorized_keys
既に他のホストの公開鍵が設定されている場合はリネームでなく追記する
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ rm .ssh/id_rsa.pub

ついでにrsyncを使う場合の方法も記しておきます。rsyncはファイルやディレクトリを転送するためのコマンドです。リモートのファイルやディレクトリをローカルに転送したり、ローカルのファイルやディレクトリをリモートに転送することができるので、バックアップ作業を行うときに活躍します。

書式 : rsync [オプション] 転送元 転送先
ローカルのファイルをリモートに転送する場合
ローカルのディレクトリ : /home/backup/backup.gzip
リモートのユーザ名 : hoge
リモートのホスト名 : example.com
リモートの転送先ディレクトリ : /home/hoge/backup/
$ rsync -avz /home/backup/backup.gzip hoge@example.com:/home/hoge/backup/
ポート番号が標準の22以外の場合
$ rsync -avze "ssh -p ポート番号" /home/backup/backup.gzip hoge@example.com:/home/hoge/backup/