SSHで鍵認証を行う

SSHはセキュアシェルですが、一つ問題点として、最初のログインのパスワードは平文です。
そこで、RSA暗号化方式(秘密鍵-公開鍵方式)を使用してセキュアにログインします。
SSHにはVersion1とVersion2がありますが、ここではSSH Version1のRSA暗号を利用する場合について説明します。WindowのSSHクライアントとしてよく知られたTera Term Pro + TTSSHの従来バージョン(Version2.3)はVersion1のみに対応していますので、SSH Version1が最もよく使用されているバージョンだと思われるからです。
1.はroot権限で、2.以降は一般ユーザ権限で行います。
1. SSHのユーザ認証を鍵認証のみに限定する場合は設定を変更します。(平文認証と併用する場合は設定変更は必要ありません。)
▼/etc/ssh/sshd_config


PasswordAuthentication no # 平文パスワード認証を禁止する
PermitEmptyPasswords no # 空文字パスワードの鍵認証を禁止する

sshdを再起動します。

# service sshd restart

2. 公開鍵ー秘密鍵ペアを作成します。(RSA公開鍵暗号Ver.1の場合)

$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/username/.ssh/identity): [通常はこのままリターン]
Enter passphrase (empty for no passphrase): [パスフレーズを入力]
Enter same passphrase again: [確認のためパスフレーズを再入力]
Your identification has been saved in /home/username/.ssh/identity.
Your public key has been saved in /home/username/.ssh/identity.pub.
The key fingerprint is:
b7:a1:38:2a:ea:fd:0f:c1:e8:30:d1:63:81:52:40:ad username@sensaba.net

~/.ssh 以下に、identity, identity.pubの二つのファイルが生成されます。それぞれ、自分の秘密鍵と公開鍵です。パーミッションは、それぞれ600(-rw——-), 644(-rw-r–r–)です。
3. authorized_keysを用意する
~/.ssh/authorized_keys ファイルに信頼できる自分の公開鍵を追加します。ssh-keygenによって先ほど作成した自分の公開鍵identity.pubを追加します。

$ chmod 700 ~/.ssh
$ cd ~/.ssh
$ touch authorized_keys
$ cat identity.pub >> authorized_keys
$ chmod 600 authorized_keys

また、接続先ホストの~/.ssh/authorized_keysにも接続元ホストにある自分の公開鍵を追加します。identiry.pubは他人に見られても問題ありませんので、ftpなど非セキュアな方法で接続先ホストにコピーすることができます。
4. 接続先ホストのホスト公開鍵を登録する
RSA公開鍵暗号による認証を利用するには、以下の条件が必要です。
a. 接続元ホストでRSA秘密鍵を作成してある(~/.ssh/identityが存在する)。
b. 接続元ホストの~/.ssh/known_hostsファイルに接続先ホストのホスト公開鍵が登録されている。
c. 接続先ホストの~/.ssh/authorized_keysファイルに接続元ホストにある自分の公開鍵(接続元ホストの~/.ssh/identity.pubの内容)が登録されている。
一度もSSHを使って接続した事のない接続先ホストにSSHによって接続すると、~/.ssh/known_hostsに相手のホスト公開鍵を登録するかどうかを訪ねられます。これに`yes’と答えれば登録されます。

作成した秘密鍵は世界でたった一つしかない重要な鍵です。この秘密鍵を誤って削除したりして失くしてしまうと、二度と同じ鍵を作成できませんので、注意してください。

5. ホストに接続する

$ ssh -1 dummyhost.sensaba.net
Enter passphrase for RSA key ‘/home/username/.ssh/identity’: [パスフレーズを入力]

単にsshとコマンドをうつとVersion2として判断されることがありますので、その場合には、”-1″オプションを付与してVersion1として接続します。