SSH パスワード認証を無効にして秘密鍵で接続する方法

概要

/etc/ssh/sshd_config で PasswordAuthentication は no 、PubkeyAuthentication を yes で接続する方法についての汎用手順を説明します。
公開鍵認証を行うわけですが、あえてタイトルには秘密鍵で接続する方法と記載しています。

  1. ssh-keygen で RSA 8192 ビットの公開鍵と秘密鍵を生成する
  2. Linux/Unix/BSD/OSX サーバ側の authorized_keys に生成された公開鍵を登録する
  3. Linux/Unix/BSD/OSX サーバ側から Windows クライアントに秘密鍵をコピーしておく
  4. Windowsクライアント側の SSH クライアントで生成された秘密鍵を認証に利用する
  5. 接続確認 1 回目
  6. Linux/Unix/BSD/OSX サーバ側でパスワード認証を無効にする
  7. 接続確認 2 回目
  8. トラブルシューティング

問題

プロバイダやクラウド事業者はサーバーへの SSH アクセスにパスワード認証を許可している。SSH は狙われやすいが、リモートでサーバのメンテナンスを行うのに利用価値が高く、必須といっても過言ではないと思います。そのためか、一部意識の高い事業者でもポート番号の変更といったレベルに留まっているのが現状ではないでしょうか。

もちろん、パスワードが破られなければ接続はできないのですが、パスワード認証は許可しないことこそが根本対策となります。パスワード認証を無効にし、秘密鍵での認証に切り替えるにあたって Windows クライアントから Unix 系サーバに SSH 接続する前提の手順を記載します。

対処

当記事では、FreeNAS 9.3 上で SSH 接続を有効にしてコマンドラインで作業していますが、他の Unix 系 OS でも OpenSSH 系を利用している場合は同じ手順が利用できるはずです。
さて、FreeNAS の ssh-keygen コマンドは、デフォルトでは RSA2 の 2048 ビットのキーが生成されます。どうせ切り替えるならもっと強度の高い 8192 ビットのキーを生成して利用しましょう。

ssh-keygen で RSA 8192 ビットの公開鍵と秘密鍵を生成する

-b オプションでビット数を指定します。

daisuke@localhost: $ ssh-keygen -t rsa -b 8192
Generating public/private rsa key pair.
Enter file in which to save the key (/home/daisuke/.ssh/id_rsa): 
Created directory '/home/daisuke/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/daisuke/.ssh/id_rsa.
Your public key has been saved in /home/daisuke/.ssh/id_rsa.pub.
The key fingerprint is:
56:8d:6e:c5:36:9b:5d:f0:31:69:ef:33:c2:ea:0e:df daisuke@nas.neoflow.jp
The key's randomart image is:
+--[ RSA 8192]----+
|              .o.|
|           +   =o|
|          o * . +|
|         o o = ..|
|        S o + .. |
|       . .   o o.|
|         .  . . o|
|          o..    |
|          o+ E   |
+-----------------+

Linux/Unix/BSD/OSX サーバ側の authorized_keys に生成された公開鍵を登録する

生成された公開鍵( id_rsa.pub ) を authorized_keys に追加登録します。

daisuke@localhost: $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Linux/Unix/BSD/OSX サーバ側から Windows クライアントに秘密鍵をコピーしておく

SCP や SFTP クライアントを利用して Windows クライアント上に秘密鍵 ( id_rsa ) をダウンロードしておきましょう。

Windowsクライアント側の SSH クライアントで生成された秘密鍵を認証に利用する

RLogin での例を示します。

RLogin_SSH認証キー(秘密鍵)の指定

RLogin_SSH認証キー(秘密鍵)の指定

接続確認 1 回目

パスワード認証が有効な状態のまま、鍵認証で接続できることを確認します。

Linux/Unix/BSD/OSX サーバ側でパスワード認証を無効にする

/etc/ssh/sshd_config で PasswordAuthentication は no 、PubkeyAuthentication は yes になっていることを確認します。
FreeNAS では WebUI 上の[サービス]-[SSH]から[パスワードの認証許可]のチェックボックスを外すことで簡単に無効化できます。

FreeNAS9.3_SSHパスワード認証の無効化

FreeNAS9.3_SSHパスワード認証の無効化

接続確認 2 回目

再度、パスワード認証が無効の状態で接続できることを確認します。

トラブルシューティング

公開鍵と秘密鍵

公開鍵( ~/.ssh/id_rsa.pub ) を利用して接続しようとした場合、以下のようなエラーとなる。この記事で紹介しているように ssh-keygen を実行したサーバーに接続する場合、サーバー側に秘密鍵があるので認証できるのではないか?と、そのように思うかもしれませんが、認証前にデータの送受信はできないため Winsock のエラーが返されます。秘密鍵に不要な改行が入っているとかそういうパターンもある様ですが、公開鍵で接続しようとした場合にもこのエラーが /var/log/auth.log に出力されるので混同されないようご注意ください。
そもそも、公開しても問題のない公開鍵を利用して認証できてしまったら意味がありません。

/var/log/auth.log

Sep 11 06:28:40 localhost sshd[11962]: error: key_read: uudecode PRIVATE KEY-----\n failed
Sep 11 06:28:40 localhost sshd[11962]: error: key_read: uudecode PRIVATE KEY-----\n failed
Sep 11 06:28:40 localhost sshd[11962]: error: key_read: uudecode PRIVATE KEY-----\n failed
Sep 11 06:28:40 localhost sshd[11962]: error: key_read: uudecode PRIVATE KEY-----\n failed
Sep 11 06:28:40 localhost sshd[11962]: error: Received disconnect from 192.168.123.111: 1: User Auth Failure [preauth]
公開鍵を指定してみる_01

公開鍵を指定してみる_01

公開鍵を指定してみる_02

公開鍵を指定してみる_02

公開鍵を指定してみる_03

公開鍵を指定してみる_03

PuTTY について

PuTTY は有名な SSH クライアントソフトウェアの一つですが、OpenSSH で生成された秘密鍵( id_rsa ) は利用できません。利用しようとすると以下のような形で明示されます。

PuTTYではOpenSSHで生成された秘密鍵は利用できない

PuTTYではOpenSSHで生成された秘密鍵は利用できない

そのため、PuTTY を利用して接続する場合には PuTTY Key Generator を利用して公開鍵と秘密鍵を生成し、秘密鍵を .ppk 形式で保存して利用する必要があります。
秘密鍵の管理が2つになるので混乱を避けるためにも、PuTTY を利用する理由がないならば OpenSSH で生成された秘密鍵を利用できる SSH クライアントを利用しましょう。

PuTTY Key GeneratorでもRSA8192ビットのキーは生成できる_01

PuTTY Key GeneratorでもRSA8192ビットのキーは生成できる_01


PuTTY Key GeneratorでもRSA8192ビットのキーは生成できる_02

PuTTY Key GeneratorでもRSA8192ビットのキーは生成できる_02

私のおすすめは単体で動作し、操作性も良く、しかもフリーソフトウェアという三拍子揃った RLogin というフリーソフトウェアです。

スポンサーリンク