2013年1月8日

Ubuntu Server 12.10 への OpenSSHの公開鍵認証の設定

先日のサーバのインストールで OpenSSHのインストールも行っていますので、今回はOpenSSHの設定を行います。
Ubuntu Server にインストールされるOpenSSHはデフォルトでパスワード接続となっていますので、公開鍵認証に変更します。

SSHの接続テスト

まずは、パスワード認証を使って sshでログインできるかテストします。
ssh ユーザ名@サーバアドレス

ログインできたら、公開鍵認証の設定を行うのでサーバから一旦ログアウトします。
exit

公開鍵認証の鍵の生成

続いて、ローカルのパソコンで認証に必要な鍵を接続元のパソコンで生成します。
ssh-keygen -t rsa -f ~/.ssh/id_rsa_eccube

とすると、
~/.ssh/id_rsa_eccube (秘密鍵)
~/.ssh/id_rsa_eccube.pub (公開鍵)
の二つが生成されます。ここでは、「id_rsa_eccube」というファイル名にしていますが、生成のファイル名は何でもいいでしょう。

公開鍵をサーバにアップロード

次に scp を使用して、公開鍵 id_rsa_eccube.pub をサーバに転送します。
scp .ssh/id_rsa_eccube.pub ユーザ名@サーバアドレス:.

これでサーバ側のユーザのホームディレクトリに id_rsa_eccube.pub がコピーされます。

SSHの公開鍵認証の設定

再度、sshでログインしリモートサーバの設定を行います。

ssh ユーザ名@サーバアドレス
~/.ssh/authorized_keys にさきほど scp でコピーしたファイルをリネームします。

さらに、公開鍵は自分しか読めないようにファイル権限を設定します。
mkdir ~/.ssh
chmod 700 .ssh/
mv id_rsa_eccube.pub ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

そして、sshdの設定を公開鍵認証だけにします。/etc/ssh/sshd_configを以下のように編集します。
sudo vi /etc/ssh/sshd_config

# パスワード認証を切る
PasswordAuthentication no # ssh1、ssh2両方に共通

# 公開鍵認証を有効にする
PubkeyAuthentication yes # ssh2の場合
RSAAuthentication yes # ssh1の場合
AuthorizedKeysFile    %h/.ssh/authorized_keys    # 公開鍵の保存場所とファイル名

最後に、sshdを再起動します。
sudo service ssh restart

SSHの接続テスト

うまく設定が出来ているかを確認のため、まずは、さきほどできたパスワード認証ができなくなっている事を確認します。
-o PubkeyAuthentication=no オプションは、ssh2の公開鍵認証を強制的に無効化するオプションです。
ssh -o PubkeyAuthentication=no ユーザ名@サーバアドレス

上記のコマンドでログインできないことを確認します。

最後に公開鍵認証でログインできるかを確認します。
ssh -i ~/.ssh/id_rsa_eccube ユーザ名@サーバアドレス

ログインできたら完了です。