更新:2017年1月16日
SSH接続で、認証のための対話を不要にするために、公開鍵認証の設定を行った。
これによって、rsyncなどのプログラムで、パスワードを手入力する対話操作がなくなる。
バックアップなどの自動動作スクリプトで効果を発揮する。
<大まかな設定手順>
1、クライアントマシン(接続元)で、公開鍵と秘密鍵のペアを作成する。
2、ペア秘密鍵は自分で保存し、ペア公開鍵はサーバーマシン(接続先)に渡す。
<仕組み>
今、クライアントAが、サーバーに接続しようとする。
このサーバーは、すでにクライアントAの公開鍵を持っている。
1、サーバーは、公開鍵(クライアントAのもの)で「暗号文」を作成する。
2、サーバーは、「暗号文」をクライアントに渡して解読するよう要求する。
3、クライアントAは暗号文を受け取り、自分の秘密鍵で解読する。(当人ならできる)
4、解読したものをサーバーに送って見せる。
5、サーバーは暗号が正しく解かれたことを確認する。
6、確認できれば、サーバはアクセスがクライアントAによるものだと認識し、接続を受け入れる。
以下では、ssh接続はrootユーザで行うものとして設定している。
そのため、設定作業や動作テストはrootユーザで行った。
以下のテストは、安全なネットワーク環境で行った。
■接続元のマシンでの設定
○公開鍵と秘密鍵のペアを作成する
[root@client ~]# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): ←空のままエンターキー
Enter same passphrase again: ←空のままエンターキー
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
8f:xx:xx:xx:xx:xxx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@client
The key's randomart image is:
+--[ DSA 1024]----+
+-----------------+
○作成されたペア鍵を確認する。
[root@client ~]# ls /root/.ssh/
id_dsa id_dsa.pub known_hosts
○公開鍵を表示する。
ここに表示される公開鍵の文字列をコピーして、後で接続先マシンで行う「ペースト作業」に備える。
(注意)安全な経路でターミナルを用いて行う。
[root@client ~]# cat /root/.ssh/id_dsa.pub
(ここに接続元マシンで作成した公開鍵が表示される)
○公開鍵のフィンガープリントは次のようにして確認できる。
フィンガープリントは長い公開鍵を短く表示(ダイジェスト)したもの。
これによって、たとえば、人間が照合しやすくなる。
今回も、接続先にこの公開鍵を渡してから、正しく渡されているかを人間が照合確認する。
[root@client .ssh]# ssh-keygen -lf /root/.ssh/id_dsa.pub
1024 8f:xx:xx:xx:xx:xxx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx id_dsa.pub (DSA)
■接続先のマシンでの設定
○もし、.sshディレクトリがなければ作成しておく。
[root@server ~]# mkdir /root/.ssh
○接続元の公開鍵を登録する。
接続元での作業で作成した公開鍵の文字列(id_dsa.pubに保存されているもの)を、次のファイル内に貼付け保存する。
改行すれば複数の公開鍵を登録できる。
[root@server .ssh]# vi /root/.ssh/authorized_keys
(接続元マシンでの操作でコピーをとった公開鍵を貼り付けて保存)
○登録保存した公開鍵のダイジェスト(フィンガープリント)を表示して、
接続元の公開鍵のフィンガープリントと比較して一致していることを確認した。(念のため)
[root@server .ssh]# ssh-keygen -lf /root/.ssh/authorized_keys
1024 8f:xx:xx:xx:xx:xxx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx authorized_keys (DSA)
■接続元マシンから接続マシンへ接続テスト
公開鍵認証のための設定は以上で終了した。
自動的に、SSH接続で公開鍵認証が用いられる。
IPv6のリンクローカルアドレスを持つマシンをターゲットに接続する場合
(ただし、ターゲットマシンは、操作元のマシンのインターフェイス3番に接続されているとする。)
結果は、いずれも公開鍵認証が行われることで、パスワード入力の手順がなくなった。
○単純にログインのテスト(IPv6接続で試している)
[root@client ~]# ssh -p 22 root@fe80::xxxx:xxxx:xxxx:xxxx%3
○ターゲットマシンを転送先としてrsyncによる同期を行うテスト
ターゲットマシンのディレクトリ /home/BACKUP/ に、その日の年月日を名称としたディレクトリを自動的に作成している。
[root@client ~]# rsync --rsh="ssh -p 22" -avz /home/ 'root@[fe80::xxxx:xxxx:xxxx:xxxx%3]':/home/BACKUP/`date +%F`/
receiving incremental file list
<参考>
・SSHの2つの認証方式の違い
< http://l-w-i.net/t/openssh/auth_001.txt > 2014年11月12日
・Public key fingerprint
< http://en.wikipedia.org/wiki/Public_key_fingerprint > 2014年11月12日
・RSA (cryptosystem)
< http://en.wikipedia.org/wiki/RSA_%28cryptosystem%29 > 2014年11月12日
・Can't find .ssh directory in my terminal?
< http://superuser.com/questions/635269/cant-find-ssh-directory-in-my-terminal > 2014年11月12日
・How do I use rsync with an IPv6 address via SSH?
< http://serverfault.com/questions/420158/how-do-i-use-rsync-with-an-ipv6-address-via-ssh > 2014年11月12日
・Enabling IPv6 for rsync daemon
< http://lvogdt.wordpress.com/2012/05/12/enabling-ipv6-for-rsync-daemon/ > 2014年11月12日
・いつまでもハマるrsyncのメモ
< http://open-groove.net/linux-command/rsync-memo/ > 2014年11月12日
・共通鍵暗号と公開鍵暗号の解説とSSHでの認証手順
< http://www.adminweb.jp/web-service/ssh/index4.html#section4 > 2017年1月16日