SSHの公開鍵認証の設定

カテゴリ:SSH

公開鍵暗号方式について

SSHを安全に使用するためには、ユーザー名、パスワードでのログインを無効にし、公開鍵認証のみでログインできるように構成します。
鍵認証を設定したクライアントではユーザー名、パスワードが求められずに直ちにログインできます。
公開鍵暗号方式のポイントは公開鍵で暗号化したデータはペアになる秘密鍵でしか復号化できない、秘密鍵で暗号化したデータはペアになる公開鍵でしか復号化できないという点です。
この仕組みにより公開鍵暗号方式は成り立っています。

SSLで暗号化されたデータはたとえ傍受されたとしても、暗号化に使用した公開鍵とペアになる秘密鍵でなければ復号化出来ません。
公開鍵認証では、公開鍵はサーバー側に置き、秘密鍵はクライアント側に置きます。

また、認証に使用する公開鍵と秘密鍵のペアの内、秘密鍵はクライアント(自分のPC)しか持っていないため、ユーザー名、パスワードによる認証のように盗まれたり、成りすましされることがありません。
家の鍵のように秘密鍵さえ盗まれなければ安全です。

公開鍵と秘密鍵の生成

標準OSの場合

標準OSをインストールしている場合は、すでに鍵認証が設定されているため、コントロールパネルから秘密鍵をダウンロードしてクライアント側に設定します。

カスタムOSの場合

カスタムOSをインストールしている場合は、以下の手順でクライアント側で鍵のペアを作成します。

Windowsの場合

puTTY や Tera Term で鍵を生成します。
例えば puTTY の場合は以下の手順で生成できます。
  1. puttygen.exeを起動し、[生成] をクリックすると、マウスを動かし乱数を生成すると作成されます。
  2. 必要に応じてパスフレーズを設定した上で、生成する鍵の種類が「SSH-2 RSA」になっている事を確認の上、公開鍵を「id_rsa.pub」、秘密鍵を「id_rsa」のファイル名でそれぞれ保存します。

MacやLinuxの場合

必要に応じてsuコマンドでrootユーザーに切り替えます。

以下のコマンドで秘密鍵と公開鍵を作成します。
パスフレーズの入力を求められるので2回入力します。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
...
秘密鍵(id_rsa )と公開鍵(id_rsa.pub)が作成されます。
# cd .ssh/
# ls
id_rsa  id_rsa.pub
クライアント側の操作はこれで終了です。
VPSサーバーに公開鍵のファイル「authorized_keys」をSSHで接続するユーザーの ~/.ssh 配下に保存または、既存の「authorized_keys」に公開鍵を追記します。
公開鍵を持っていく方法は後述します。

VPSに公開鍵を持っていく方法

MacやLinuxの場合:
scpコマンドでVPSにアップロードできます。
サーバーにauthorized_keysがない場合(直接ファイルをコピー):
$ scp ~/.ssh/id_rsa.pub ユーザー名@IPアドレス:~/.ssh/authorized_keys
サーバにauthorized_keysが既にある場合(既存のファイルに追記):
$ scp ~/.ssh/id_rsa.pub ユーザー名@IPアドレス:/home/hoge
サーバー側で公開鍵をauthorized_keysに追記します。
# cat id_rsa.pub >> /root/.ssh/authorized_keys
VPS側でコピーした公開鍵のパーミッションを変更します。
# chmod 600 ~/.ssh/authorized_keys
Windowsの場合:
公開鍵と秘密鍵を生成した後、puttygenの「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」に表示されている公開鍵の内容をコピーし、VPSにSSHで接続し、viコマンドで以下のファイルを開きます。
vi ~/.ssh/authorized_keys
コピーしておいた公開鍵をペーストして保存した後、パーミッションを変更します。
# chmod 600 ~/.ssh/authorized_keys
また、ホームディレクトリのパーミッションを 755 にしておきます。
# chmod 755 /home/hoge
設定を反映させるためにsshdを再起動します。
# service sshd restart
CentOS 7 以降の場合:
# systemctl restart sshd

VPSサーバー側の設定

初期設定では /etc/ssh/sshd_config の PubkeyAuthentication がコメントアウトされているので、コメント(#)を外します。
変更前:
#PubkeyAuthentication yes
変更後:
PubkeyAuthentication yes
設定を反映させるためにsshdを再起動します。
# service sshd restart
CentOS 7 以降の場合:
# systemctl restart sshd

SSHクライアントに秘密鍵を設定する

まず秘密鍵をクライアントマシンでダウンロードします。

puTTYの場合

  1. puttygen.exe を起動し、[読込] をクリックし、秘密鍵を指定してインポートします。
  2. 必要に応じてパスフレーズを入力した上で [秘密鍵の保存] より秘密鍵を保存します。
  3. puTTYでのログイン時に、puTTYの設定の [SSH] > [認証] を開き、[参照] から秘密鍵を指定します。
  4. ホスト名を入力して接続します。
  5. ログインするユーザーを入力すると、パスフレーズを聞いてくるので入力します。
login as: root
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key":
これでセキュアなログインが行えます。

MacやLinuxのコンソールの場合

VPSのコントロールパネルから秘密鍵をダウンロードした場合は、コンソールを開き、秘密鍵を ~/.ssh 配下に置きます。
$ cp vpsxxxxx-001.key ~/.ssh
パーミッションを変更します。
# chmod 600 ~/.ssh/vpsxxxxx-001.key
SSHのconfigファイルを作成し秘密鍵を指定します。
# vi ~/.ssh/config
IdentityFile ~/.ssh/vpsxxxxx-001.key
SSHコマンドで接続します。
$ ssh root@hoge.com

公開鍵認証のみに制限する

初期設定では /etc/ssh/sshd_config の PasswordAuthentication がコメントアウトされているので、コメント(#)を外し、no を指定します。
変更前:
#PasswordAuthentication yes
変更後:
PasswordAuthentication no
設定を反映させるためにsshdを再起動します。
# service sshd restart
CentOS 7 以降の場合:
# systemctl restart sshd

公開日時: 2014年07月19日  12:02:01

SSHに戻る

「SSH」に関するTips

このページのトップに戻る