rsyncをパスワード無しで実施する
CentOS 7でサーバ間の同期を実行する必要があったのでrsyncで同期してみました。
サーバ間で鍵交換の設定を行いパスワード認証無しでrsyncを実施させています。
今回はサーバBが受信側となりサーバAからパスワード認証無しでファイル受信し同期してみました。
-
- サーバA:送信側
- サーバB:受信側
サーバB(受信側)で秘密鍵と共通鍵のセットを作成
ssh-keygenコマンドを使ってサーバB(受信側)で鍵セットを作成
ssh-keygenコマンドを使って鍵の作成を行います。鍵の暗号化形式はRSA形式としています。
ssh-keygenコマンドはrsync実行ユーザーで行います。
rsync実行ユーザーのホームディレクトリ配下にある.sshディレクトリに鍵を作成します。
[ユーザー名@Server-b .ssh]$ ssh-keygen -t rsa -C " -N " -f /home/ユーザー名/.ssh/id_rsa |
-Cオプションで"を設定することでコメントを削除しています。-Nオプションで"とする事で、パスフレーズ無しとしています。
実行後にファイルを確認しますと秘密鍵と公開鍵が出来ている事が分かりました。
-
- id_rsa (秘密鍵)
- id_rsa.pub (公開鍵)
-rw——- 1 xxxx xxxx 1.7K M月 dd 06:06 id_rsa |
chomodコマンドで作成した鍵の権限設定
権限系の設定実施しておかないと後ほど注意メッセージが表示されてしまいます。
chmodコマンドで.sshディレクトリと公開鍵への権限設定します。
権限はrsync実行ユーザーのみが利用できるようにします。
[ユーザー名@Server-b .ssh]$ chmod 700 /home/ユーザー名/.ssh [ユーザー名@Server-b .ssh]$ chmod 600 /home/ユーザー名/.ssh/id_rsa.pub |
サーバBからサーバAに公開鍵ファイルを転送
公開鍵を受信側(サーバB)から送信側サーバ(サーバA)に転送します。
ユーザー名はrsyncで利用するログインユーザー名を指定します。
今回はSCPコマンドでファイル転送実施しています。
[ユーザー名@Server-b .ssh]$ scp -P SSH時のポート番号 /home/ユーザー名/.ssh/id_rsa.pub ログインユーザー名@接続先サーバのIP:/home/ユーザー名/.ssh/id_rsa.pub |
※SSHのポート(通常は22)を変更している場合は-pオプションでSSHポートを指定します。変更していない場合は-pオプションは必要ありません。
サーバAで鍵の設定
公開鍵情報をauthorized_keys ファイルに統合
送信サーバ側で鍵の設定を行います。rsyncの実行ユーザーで実施します。
catコマンドでサーバBの公開鍵情報をauthorized_keys ファイルに書き込みます。
[ユーザー名@Server-a .ssh]$ cd /home/ユーザー名/.ssh [ユーザー名@Server-a .ssh]$ cat id_rsa.pub >> authorized_keys |
chomdコマンドで権限設定
authorized_keys ファイルと.sshディレクトリの権限設定を実施します。
authorized_keysに書き込みが終わったサーバBの公開鍵は必要ないので削除します。
[ユーザー名@Server-a .ssh]$ chmod 700 /home/ユーザー名/.ssh [ユーザー名@Server-a .ssh]$ chmod 600 /home/ユーザー名/.ssh/authorized_keys [ユーザー名@Server-a .ssh]$ rm -f id_rsa.pub |
これで設定は終わりです。
パスワード無しでrsyncコマンドを試してみる
設定が終わったら、rsyncを試してみます。rsyncコマンドのオプションは適時指定してください。
[ユーザー名@Server-b .ssh]$ rsync -avzu “ssh -p SSH時のポート番号 -i /home/ユーザー名/.ssh/id_rsa " ユーザー名@接続先サーバ名:コピー元ディレクトリコピー先ディレクトリ |
エラーになるもしくはパスワードを聞かれる場合は、権限かファイル名を間違っているケースが多いかと思いますので再度確認してみましょう。
Cronに設定するとrsyncによる同期を定期的に実行する事も可能です。
※セキュリティ面は充分注意の上実施可否を判断するようにして下さい。