SSHの公開鍵認証の設定

カテゴリ:SSH

CentOS/Ubuntu 両対応

公開鍵暗号方式について

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

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

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

公開鍵と秘密鍵を生成してVPSに公開鍵を設定する方法

SSHの公開鍵認証を設定する場合、クライアント側で公開鍵と秘密鍵を生成してVPSに公開鍵を設定する方法と、VPS側で用意された(生成した)秘密鍵をSSHクライアントに設定する方法の2つの方法があります。どちらで設定しても問題ありませんが、後者の方が簡単です。

ここではクライアント側で公開鍵と秘密鍵を生成してVPSに公開鍵を設定する方法を解説します。

関連 Mac環境ですぐに公開鍵認証を設定したい場合はこちらの記事をご参照ください。

標準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を再起動します。

# systemctl restart sshd

VPSサーバー側の設定

初期設定では /etc/ssh/sshd_config の PubkeyAuthentication がコメントアウトされているので、コメント(#)を外します。
変更前:

#PubkeyAuthentication yes

変更後:

PubkeyAuthentication yes

設定を反映させるためにsshdを再起動します。

# systemctl restart sshd

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

ここではVPS側で用意された秘密鍵を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を再起動します。

# systemctl restart sshd

もし秘密鍵を持たないSSHクライアントからログインを試みた場合、以下のように「Permission denied」となり拒否されます。

$ ssh root@linux-svr.com
The authenticity of host 'linux-svr.com (118.27.5.3)' can't be established.
ECDSA key fingerprint is SHA256:iBBqqAKENC0H5ffmwD8LqaLfpYjpJFL7Sd8oXdpJ8P0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'linux-svr.com' (ECDSA) to the list of known hosts.
root@linux-svr.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

公開日時:2014年07月19日 12:02:01
最終更新日時:2022年03月10日 20:37:33

なお、VPS選びで迷ったらこちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

SSHに戻る

「SSH」に関するTips

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