SSHの認証方式を「パスワード認証」から「公開鍵認証」に変更してみた

投稿者:

secure

SSH(Secure Shell)はリモート操作のためのサービスで、SSHサーバが動作しているサーバに対して、PuTTY等のSSHクライアントやMacのターミナルからログインできるようにするためのものです。サーバ管理者にとってはメンテナンス等の業務に必須の技術だと言えますね。
VPS等のサービスを利用した場合、最初からインストールされていて動作している事もありますが、デフォルトでは「パスワード認証」方式のままですので、今回は「公開鍵認証」方式に変更する方法についてまとめたいと思います。

補足ですが、デフォルト設定からの変更については以下の項目も実施した方が尚良いです。

  • rootログインの禁止:セキュリティ強化のため
  • ログイン元IPの制限:セキュリティ強化のため
  • ポート番号の変更:22番狙いの輩が多く、無駄なログが増えるため(ポートスキャンに対しては無力ですが)

作業手順

  1. 鍵のペアを作成して、公開鍵をサーバに設定する
  2. sshサーバの設定を変更する
  3. 秘密鍵をクライアントに設定する




鍵のペアを作成

Windows等でも鍵の作成ツールはありますが、今回はLinuxサーバ上で作成します。鍵の暗号化方式は「RSA(2048bit)」。接続元のクライアントに秘密鍵、接続先のサーバに公開鍵を設定しますが、万が一秘密鍵がなくなると厄介なのでバックアップも重要です。また鍵の作成時に問われる「パスフレーズ」は鍵自体の暗号化に使用するもので、鍵を盗まれれば解読されやすいため10文字以上を推奨します。作成コマンドは「ssh-keygen」で、オプション「-t」で暗号化方式を指定します。

# ssh-keygen -t rsa
# ls
# id_rsa id_rsa.pub

公開鍵をサーバに設定する

ファイル名の指定をしていないので「id_rsa(秘密鍵)」「id_rsa.pub(公開鍵)」が作成されていると思います。その辺にない場合はホームディレクトリの.sshディレクトリ内を確認してください。今回この鍵のペアを利用するユーザーを「username」とした場合、usernameのホームディレクトリ下の.sshディレクトリに公開鍵を「authorized_keys」にリネームして設置します。

# mv /home/username/.ssh/id_rsa.pub /home/username/.ssh/authorized_keys

秘密鍵の方はダウンロードするなり、内容をコピペするなりして、ローカルに保存し直してください。

sshサーバの設定を変更する

以下はデフォルト設定なので有効なはずですが、有効でない場合は確認して変更してください。
※sshd_config(d付き)とssh_config(dなし)があるので注意

# RSA認証の許可
RSAAuthentication yes
# 公開鍵認証の許可
PubkeyAuthentication yes
# 公開鍵ファイルのパス
AuthorizedKeysFile .ssh/authorized_keys

当然ですが、パスワード認証はデフォルトで有効なので、こちらは無効にする

# パスワード認証を不許可
PasswordAuthentication no

設定完了後はsshサーバを再起動して設定を有効化します。

# service sshd restart

ちなみに以降の流れで公開鍵認証のみにした場合で、何かのミスによりログインできなくなると困るので、接続確認を行うまではsshの接続はそのままにしておいた方が安全です。

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

サーバ側の準備ができましたので、後はクライアント側に秘密鍵を設定します。

Mac/Linuxの場合

ホームディレクトリの.sshディレクトリ内にconfigファイルを設定する事で簡単にできます。

# server1 config
Host server1
Hostname server1.memento-mori.jp
IdentityFile ~/.ssh/server1.key
Port 22
User server1_user

# server2 config
Host server2
Hostname server2.memento-mori.jp
IdentityFile ~/.ssh/server2.key
Port 22
User server2_user

接続時は「Host」の名前を指定すれば簡単に接続できます。

# ssh server1

Windows(PuTTY)の場合

PuTTYを使用する場合はPuTTY用に鍵を変換してから設定します。

1.「PuTTYgen」を起動して「読込」ボタンから秘密鍵を選択します。
putty

2.読み込みに成功するとNoticeの画面が表示されますので、「秘密鍵の保存」を押して「server1.ppk」等のファイル名で保存してください。(ppkはPuTTY用の鍵ファイルの拡張子)
putty2

3.「PuTTY」を起動して、セッションを登録、または保存した状態の設定を読み込みます
putty3

4.画面左の「接続→SSH→認証」のプライベートキーファイルを設定する個所に先ほど作成した「server1.ppk」を読み込み、設定します。(セッションも再保存してください)
putty4

5.画面下の「開く」からサーバに接続、ユーザー名を入力してパスフレーズを入力すればログインできます。




Photo credit: GotCredit via Visual Hunt / CC BY