rsync + sshでデータをコピーする際に、rsyncを実行するためだけに使用するsshの鍵ペアを作成して、パスワード無しでデータをやり取りする方法です。
仕組みとしては、公開鍵をauthorized_keysに登録する際にcommandを設定することで特定のコマンドのみを実行させることが出来ます。
この機能を使用することによって、登録した公開鍵を使ってもrsyncでデータのコピーだけにしか使用できなくなるので、パスフレーズが設定されていない場合でも安心度が高まります。
前提条件
今回設定する作業の前提条件は下記の通りとなります。
- クライアントとリモートサーバのOSはUbuntuで動作検証
- リモートサーバのSSHで公開鍵認証が設定されていること
SSHの認証を公開鍵認証にする方法は以下のページで説明しています。
作業内容
実際の作業内容は下記のとおりとなります。
- 【クライアント】鍵ペアを作成
- 【リモートサーバ】authorized_keysに公開鍵を登録
- 【クライアント】rsyncコマンドをvvオプションを指定して実行
- 【リモートサーバ】authorized_keysにcommandを設定
- 【リモートサーバ】動作確認
- rsyncでデータコピーされるかの確認
- 作成した秘密鍵を使用してSSHログイン出来ないことを確認
【クライアント】鍵ペアを作成
現在使用している鍵ペアとは別に、rsync専用の鍵ペアをクライアント側で作成していきます。
ssh-keygen -t ed25519 -N '' -C コメント -f 鍵ファイル名
- -t 作成する鍵のタイプ指定
- 特にこだわりがなければed25519形式を指定
- -N 新規パスフレーズ設定
- 「''」で空のパスフレーズ(パスフレーズ無し)を設定
- -C コメント設定
- 鍵の用途を設定することで、リモートサーバ側で鍵の使用用途が判別しやすくなる
- -f 鍵のファイル名設定
- 鍵の用途が分かりやすいファイル名を設定
実際の作成例
実際にssh-keygenコマンドで鍵ペアを作成します。
$ ssh-keygen -t ed25519 -N '' -C Data_Backup -f ~/.ssh/ed25519_backup
秘密鍵と公開鍵がこのように作成されます。
ed25519_backup.pubが公開鍵となりますので、この内容をリモートサーバのauthorized_keysに登録することになります。
$ ls -l ed25519_backup* -rw------- 1 tamohiko tamohiko 399 5月 31 10:41 ed25519_backup -rw-r--r-- 1 tamohiko tamohiko 93 5月 31 10:41 ed25519_backup.pub
【リモートサーバ】authorized_keysに公開鍵を登録
リモートサーバの~/.ssh/authorized_keysに作成した公開鍵を登録します。
$ vi ~/.ssh/authorized_keys
登録が完了しましたら、作成した秘密鍵でSSHログインが出来ることを確認してください。
【クライアント】rsyncコマンドを実行して実行内容を確認
authorized_keysにcommandの設定を追加して、設定したコマンドのみを実行させるという方法で登録した鍵をrsync専用にします。
そのため、commandに設定するためのコマンドを確認する必要があります。
まずは、リモートサーバのauthorized_keysに登録した鍵ペアを使用して、rsyncコマンドを実行し動作に問題ないかを確認します。
rsyncの動作に問題がなければ、commadに設定するコマンドを確認するために、vvオプションをつけて再度rsyncを実行してください。
vvオプションをつけることで、rsyncの詳しい実行時の情報を表示させることが出来ます。
$ rsync -azvv -e 'ssh -p ポート番号 -i 秘密鍵' ユーザ名@ホスト:コピー元 コピー先 $ rsync -azvv -e 'ssh -p ポート番号 -i 秘密鍵' コピー元 ユーザ名@ホスト:コピー先
vv以外に必要なオプションは適宜設定してください。
rsyncコマンドの使用方法は下記のサイトで説明しています。
https://www.server-memo.net/tips/rsync/rsync.html
実行例
実際に実行してみると、下記のような内容が表示されます。
- コピー元:リモートサーバの/home/tamohiko/music/
- コピー先:クライアントの/home/tamohiko/music_data
$ rsync -azvv -e 'ssh -p 10022 -i ~/.ssh/ed25519_backup' tamohiko@リモートサーバ:/home/tamohiko/music/ /home/tamohiko/music_data opening connection using: ssh -p 10022 -i "~/.ssh/ed25519_backup" -l tamohiko リモートサーバ rsync --server --sender -vvlogDtprze.iLsfxCIvu . /home/tamohiko/music/ (14 args)
opening connection usingと表示されている行の、「rsync --server --sender」以降の部分をリモートサーバのauthorized_keysにcommandとして設定します。
rsync --server --sender -vvlogDtprze.iLsfxCIvu . /home/tamohiko/music/
【リモートサーバ】authorized_keysにcommandを設定
リモートサーバのauthorized_keysに先程確認したコマンドを設定していきます。
$ vi ~/.ssh/authorized_keys
登録してある公開鍵の前に、command="コマンド内容"といったようにcommand設定を追加します。
command="rsync --server --sender -vvlogDtprze.iLsfxCIvu . /home/tamohiko/music/" ssh-ed25519 公開鍵情報 Data_Backup
【クライアント】動作確認
動作確認として、以下の内容のテストを行って下さい。
- rsyncが正常に出来ること
- 作成した鍵ペアでrsync以外出来ないこと
rsyncが正常に出来ることの確認
実際にrsyncを実行して、正常にデータのコピーが出来ることを確認して下さい。
注意する点としては、rsyncはvvコマンドをつけて実行した時と同じ内容で行って下さい。
rsync専用の鍵でsshログイン出来ないこと
作成した鍵を使用して、通常のSSHログインが出来ないことを確認して下さい。
$ ssh -p ポート番号 -i 秘密鍵 ユーザ名@リモートサーバ
動作に問題がなければ設定は完了となります。
fromを使ってIP制限をかける
authorized_keysではfromでIPによる接続制限設定を行うことが出来ます。
from="クライアントIP"
クライアント側のIPアドレスが固定であれば、この機能を使用することで接続先を制限できるため、よりセキュリティーを高めることが出来ます。
「,」を入れることで、fromとcommandといったように複数の設定をauthorized_keysに追加することが出来ます。
事前に設定してあるauthorized_keysに追加する場合は、以下のようになります。
from="クライアントIP",command="rsync --server --sender -vvlogDtprze.iLsfxCIvu . /home/tamohiko/music/" ssh-ed25519 登録済みの公開鍵情報 Data_Backup
fromに登録されているIP以外からrsyncを行うと、Permission denied (publickey)となり接続ができなくなります。
$ rsync -azvv -e 'ssh -p 10022 -i ~/.ssh/ed25519_backup' tamohiko@リモートサーバ:/home/tamohiko/music/ /home/tamohiko/music_data opening connection using: ssh -p 10022 -i "~/.ssh/ed25519_backup" -l tamohiko リモートサーバ rsync --server --sender -vvlogDtprze.iLsfxCIvu . /home/tamohiko/music/ (14 args) tamohiko@リモートサーバ: Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: unexplained error (code 255) at io.c(228) [Receiver=3.2.3]
コメント