通常、Linuxサーバーをリモート管理する際にはPuTTYなどのSSHクライアントを使用します。しかし、一般的なパスワード方式のログインでは、パスワードがブルートフォース攻撃によって解読される危険性があります。そのため、通常はSSHのポートをデフォルトの22以外に設定したり、rootアカウントでのログインを無効化したりします。実は、安全性を確保し、rootアカウントで安心してリモートログインできるようにする、より良い方法があります——それは鍵方式によるログインです。

鍵によるログインの原理は次のとおりです。鍵生成ツールを使用して一対の鍵(公開鍵と秘密鍵)を作成します。公開鍵をサーバーの任意のアカウントに追加し、クライアント側で秘密鍵を使用して認証を完了しログインします。こうすることで、秘密鍵を保有していない限り、誰もSSHブルートフォース攻撃でパスワードを解析してシステムにリモートログインすることはできません。さらに、公開鍵を他のアカウントやホストにコピーすれば、秘密鍵を使ってログインすることもできます。

次に、Linuxサーバーで鍵ペアを作成し、公開鍵をアカウントに追加し、SSHを設定し、最後にクライアントからログインする方法を説明します。

1. 鍵ペアの作成

まずサーバー上で鍵ペアを作成します。鍵ログインを使用する予定のアカウントでパスワードログインし、次のコマンドを実行します。

[root@host ~]$ ssh-keygen  <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
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. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

鍵ロックコードは秘密鍵を使用する際に入力する必要があり、これにより秘密鍵の盗用を防ぐことができます。もちろん、空欄のままにすればパスワードなしログインも可能です。

これで、rootユーザーのホームディレクトリに.sshという隠しディレクトリが生成され、その中に2つの鍵ファイルが含まれています。id_rsaが秘密鍵、id_rsa.pubが公開鍵です。

2. サーバーに公開鍵をインストールする

以下のコマンドを入力して、サーバーに公開鍵をインストールします:

[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys

これで公開鍵のインストールが完了しました。接続が確実に成功するように、以下のファイルのパーミッションが正しいことを確認してください:

[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh

3. SSHを設定し、鍵ログイン機能を有効にする

/etc/ssh/sshd_config ファイルを編集し、以下の設定を行います:

RSAAuthentication yes
PubkeyAuthentication yes

また、rootユーザーがSSHでログインできるかどうかに注意してください:

PermitRootLogin yes

すべての設定が完了し、鍵方式でのログインが成功したら、パスワードログインを無効にします:

PasswordAuthentication no

最後に、SSHサービスを再起動します:

[root@host .ssh]$ service sshd restart

4. 秘密鍵をクライアントにダウンロードし、PuTTYで使用できる形式に変換します

WinSCP、SFTPなどのツールを使用して、秘密鍵ファイルid_rsaをクライアントマシンにダウンロードします。次にPuTTYGenを開き、ActionsのLoadボタンをクリックして、先ほどダウンロードした秘密鍵ファイルを読み込みます。もし先ほど鍵のパスフレーズを設定した場合は、ここで入力する必要があります。

読み込みが成功すると、PuTTYGenに鍵に関する情報が表示されます。Key commentに鍵の説明情報を入力し、[Save private key]ボタンをクリックすると、秘密鍵ファイルをPuTTYで使用できる形式で保存できます。

今後、PuTTYでログインする際は、左側のConnection -> SSH -> AuthにあるPrivate key file for authentication: で秘密鍵ファイルを選択し、そのままログインできます。作業中に鍵ロックコードを入力するだけで済みます。