こんにちは、くまごろーです。
先日CentOSの初期設定について書いたんですが、「鍵認証」についてもっと簡単でわかりやすい方法があったので
あらためて記事を作ってまとめようと思います。
1 そもそも公開鍵認証とは
サーバーへのログインをパスワード認証で行うと、パスワードが割れれば第三者がログインできるので好ましくない。公開鍵認証を使えば、パスワードを使わず、安全にログインすることができる。
公開鍵認証は、公開鍵と秘密鍵のペアを使用することで行われる。クライアント側で公開鍵と秘密鍵を生成した後、公開鍵は接続先サーバーに登録し、クライアント側は秘密鍵を持っておく。(この仕組みが最初全然理解できなかった・・・)
ログイン時、サーバーに登録されている公開鍵と、クライアントが提示した秘密鍵が適合すれば、ログインが成功する。
2 公開鍵・秘密鍵の生成
ここからは、「Tera Term」を使用してやっていきます。
「Tera Term」定番のターミナルエミュレーター - 窓の杜
※ TeraTermには鍵を生成する機能があり、コマンドを入力しなくても公開鍵・秘密鍵を生成できます。
(1)「TeraTerm」の設定メニューの「SSH鍵生成」をクリックする。
(2)すると、↓のような画面が表示されるので、「生成」をクリックする。
(3)「生成」を実行すると画面下部の「パスフレーズ」、「コメント」を入力できる状態になる。(パスフレーズはログイン時、秘密鍵を使用する際に入力を求められる。一応空欄でも生成は可能。)
※ ちなみに、私の場合パスフレーズを設定するとログイン時にエラーが出てログインできませんでした(-"-)パスフレーズ無しでやってみたらログインできました。原因は不明
(4)最後に、画面下部の「公開鍵の保存」「秘密鍵の保存」をそれぞれクリックして、鍵を保存する。(自分のローカル環境のフォルダで問題ありません。)
※ 「id_rsa.pub」が公開鍵、「id_rsa」が秘密鍵です。
3 公開鍵の登録
(1)次に、公開鍵をサーバー側に登録する。TeraTermでサーバーにログインし、「id_rsa.pub」をTeraTermウィンドウ上にドラッグ&ドロップする。↓様なウィンドウが表示されるので、任意のフォルダを設定して「送信」ボタンを押す。
(2)公開鍵をサーバー内のディレクトリに送ることができたが、まだ登録はできていない。以下のコマンドで、公開鍵を「~/.ssh/authorized_keys」ファイルに登録する。
$ cat id_rsa.pub >> .ssh/authorized_keys
そして、authorized_keysのアクセス権を変更する。(所有者以外がアクセスできないようにする。)
$ chmod 600 .ssh/authorized_keys
以上で鍵の登録は完了。これで、秘密鍵を使用してログインできるようになっているはず。SSH認証画面で、「RSA/DSA/ECDSA/ED25519」にチェックを入れ、生成した秘密鍵を指定する。それでログインできればOK。
4 パスワード認証ではログインできないようにする
最後に、パスワードではログインできないよう設定を変更する。
以下のコマンド入力して「/etc/ssh/sshd_config」ファイルの編集画面を開く。
$ sudo vim /etc/ssh/sshd_config
このファイルの以下の部分を変更する。
PasswordAuthentication yes → PasswordAuthentication no
変更後ファイルを保存したら、設定を再読込する。
$ sudo systemctl reload sshd.service
※ ちなみに、鍵認証の設定がうまくいってないと、3を実行した時点でTeraTermからVPSにはログインできなくなってしまいます。そうなったらVNCコンソールからログインして変更した箇所を元に戻せば復旧できます。(私も一度やってしまいました('_'))