簡単にできる公開鍵認証を使った接続をする方法

自分のパソコンのターミナルで ssh-keygen を実行する。ここでパスフレーズを入れると、公開鍵での接続の際にパスフレーズの入力が必要になります。パスフレーズを入れなければ接続の際にパスフレーズが必要ありません。自動化のための SSH の接続に使用する場合はパスフレーズを入れないと良いです。

1
2
3
4
5
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/example/.ssh/id_rsa): // ファイル作成場所
Enter passphrase (empty for no passphrase): // パスフレーズを入力する
Enter same passphrase again: // パスフレーズをもう一度入力する

~/.ssh ディレクトリに以下のようにファイルが生成されます。

1
2
3
-rw-------   1 example  staff  1743  5 14 16:29 id_rsa
-rw-r--r--   1 example  staff   402  5 14 16:29 id_rsa.pub
-rw-r--r--@  1 example  staff  3911  5 11 02:28 known_hosts

id_rsa.pub をサーバのユーザーディレクトリの .ssh/ フォルダの中に authorized_keys という名前で保存する。フォルダがなければ、まずは以下のようにサーバー側に必要なディレクトリの作成から始めます。

1
2
cd ~
mkdir .ssh

次にローカルから .ssh フォルダの中に対して以下のようにしてファイルを転送します。

1
scp -P 10022 ~/.ssh/id_rsa.pub example@example.com:~/.ssh/authorized_keys

転送が終わったらサーバー側でパーミッションを調整します。

1
2
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

この段階で公開認証鍵を使ったログインができる状態になります。
これを公開認証鍵のみでのログインできる状態に変更します。
以下のファイルを編集します。ついでにいろいろ設定しましょう。

1
2
su
vim /etc/ssh/sshd_config

PermitRootLogin を no にすることで root によるログインを禁止することができます。without-password を設定すればパスワードによるログインを禁止することができます。

1
PermitRootLogin no

PasswordAuthentication を no にすることで root のみならず全てのユーザーでパスワードによるログインを禁止することができます。これで認証鍵を持っていなければログインすることができなくなります。

1
PasswordAuthentication no

PermitEmptyPasswords を no に設定することで空のパスワードでのログインを禁止することができます。

1
PermitEmptyPasswords no

設定が完了したら SSH の設定を反映させましょう。

1
/etc/init.d/sshd restart

認証鍵の設定ですが、きちんと設定が反映されているかをチェックする際はこの段階でログアウトせずに別のウィンドウでログインできるかを試すべきです。万が一設定に問題があった場合、一度ログアウトしてしまうと二度とログインできなくなります。私はこれで1度サーバーを初期化しなければいけなくなりました。

コメント

コメントは受け付けていません。