さくらのVPSにSSH公開鍵認証を設定した

さくらインターネットのVPSにSSH公開鍵認証の設定をしたのでその記録です。

まず、SSHのポートを変えておきます。SSHのポートは22がデフォルトなんですが、あらゆるIPアドレスの22番ポートへのアタックをかけるフトドキbotとかいるんで、変えておくことで回避できます。
/etc/ssh/sshd_configの下記の内容をコメント外して22番を変更します。ここでは10022に変更しています。
#Port 22
 ↓
Port 10022

次に認証の鍵を生成します。
とりあえずココではLinux上でRSA暗号方式の鍵を作成する方法です。具体的にはMacのターミナルから作ってます。
$ ssh-keygen -t rsa ←RSA方式を指定
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(ユーザ)/.ssh/id_rsa):  ←[Enter]キーを押下
Enter passphrase (empty for no passphrase): ←パスフレーズを入力
Enter same passphrase again: ←再度パスフレーズを入力
Your identification has been saved in /Users/(ユーザ)/.ssh/id_rsa.
Your public key has been saved in /Users/(ユーザ)/.ssh/id_rsa.pub.
The key fingerprint is:
4e:7d:93:1e:14:eb:e8:ab:67:55:91:82:1f:b1:9f:c1 user@local-pc

これで$HOME/.ssh/ディレクトリに秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されます。
公開鍵を「authorized_keys」のファイル名にしてサーバーの$HOME/.ssh/ディレクトリに置きます。

すでに「$HOME/.ssh/ディレクトリ」ファイルが存在している場合は、以下のコマンドでauthorized_keysファイルに公開鍵を追加します。公開鍵は複数設置できるんです。
$ cat id_rsa.pub >> $HOME/.ssh/authorized_keys

サーバーの.sshディレクトリのパーミッションを700、authorized_keysファイルのパーミッションを600に設定します。
$ chmod 700 $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys

続いてsshd_configを編集して、RSA公開鍵認証の有効化とパスワード認証の無効化の設定を行います。
編集するのは/etc/ssh/sshd_configファイルです。

まず、RSA公開鍵認証の設定を有効にします。ま、デフォルトでも有効なんですが明示するためにコメント外しておきました。
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeyFile   .ssh/authorized_keys
のコメントを外して、下記のようにします。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeyFile   .ssh/authorized_keys

次にrootでログインできないように設定します。
#PermitRootLogin yes
のコメントを外して、「yes」を「no」に変更します。
PermitRootLogin no

続いてrhostでの接続とパスワード認証の無効化です。
#RhostsRSAAuthentication no
#PasswordAuthentication yes
#PermitEmptyPasswords no
各コメントを外して、PasswordAuthenticationの「yes」を「no」に変更します。
RhostsRSAAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

あとはsshdを再起動すれば、sshd_configの変更が読み込まれます。
# /etc/init.d/sshd restart
これで以下の条件を満たさない限りログインできなくなります。
  • サーバ上の公開鍵とペアの秘密鍵を持っていること
  • 鍵のパスフレーズを知っていること

SSHログインするにはこんな感じのコマンドで。
$ ssh -p 10022 (IPアドレス) -l (ユーザ)

ファイル転送ツールもSFTPにして、秘密鍵を設定して使わないとアクセスできなくなるので気をつけてください。

もし、SSH接続しようとして以下のメッセージが出たら.sshとauthorized_keysのパーミッションを確認してみましょう。
Permission denied (publickey,gssapi-with-mic).
僕はこれに引っかかったんですが、パーミッションを.sshは700、authorized_keysを600に変更したら解決しました。