[CentOS 8] VPS 上で動かしてるから ssh サーバの認証をパスワード認証から公開鍵認証に変更した
前書き
さくらの VPS で稼働させている CentOS の ssh サーバの認証方法を変更する。パスワード認証から公開鍵認証への変更だ。
CentOS の NIC にグローバル IP が設定されているため、インターネット上のどこからでも IP 通信ができる状態にある。
つまりパスワード認証のまま放置すると、万が一 CentOS に登録してあるユーザー名とそのパスワードがバレてしまうと、誰にでもログインされてしまう可能性がある。
公開鍵認証に変えてしまえば、原理的にこのリスクを排除できる。だからやるのだ。
参考記事
過去に同様の設定を Ubuntu でやったときの記事 と Linux Lite でやったときの記事 を参考にする。
ssh クライアントを決める
まず CentOS に ssh ログインできる端末 (パソコン) を決めます。僕の場合は愛用の MacBook Pro です。この MacBook Pro だけ CentOS に ssh ログインできるようにします。
ssh クライアントで鍵ペアを作る
では MacBook Pro で鍵ペア = 秘密鍵と公開鍵を作る。
$ cd $ cd .ssh $ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/Users/nobi/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/nobi/.ssh/id_rsa. Your public key has been saved in /Users/nobi/.ssh/id_rsa.pub. The key fingerprint is: SHA256:IsRuDWAx6NQtMYfeSsarClGQkLlq2CxqV/A51zPrTQw nobi@nobis-mbp.lan The key's randomart image is: +---[RSA 4096]----+ |+=*++. | |=+ Bo. | |o.+ * | |.o O + | |+oo O + SE | |+oo+ * o +o | |+.. . o +o | |oo . .o | |+ . .. . | +----[SHA256]-----+ $ ls -l id_rsa* -rw------- 1 nobi staff 3434 Jul 1 18:25 id_rsa -rw-r--r-- 1 nobi staff 744 Jul 1 18:25 id_rsa.pub $
秘密鍵 (id_rsa) のファイル名を変える。無理に変えなくても良いが僕は変える。
$ mv id_rsa SakuraVPSCentOS $
ssh サーバで下準備する
以下のように .ssh ディレクトリを作る。ここに ssh クライアントで作った公開鍵 (id_rsa.pub) を持っていくためである。
$ cd $ mkdir .ssh $ chmod 700 .ssh $ ls -ld .ssh drwx------ 2 nobi nobi 4096 Jul 1 18:23 . $
公開鍵を ssh クライアントから ssh サーバに scp で送る
$ scp ./id_rsa.pub nobi@ww.xx.yy.zz:/home/nobi/.ssh nobi@ww.xx.yy.zz's password: id_rsa.pub 100% 744 32.0KB/s 00:00 $
ssh サーバに送ってしまえば ssh クライアントが公開鍵を持っている必要はないので削除する。
$ rm id_rsa.pub $
ssh サーバで authorized_keys ファイルを作る
$ ls -l id_rsa.pub -rw-r--r-- 1 nobi nobi 744 Jul 1 18:35 id_rsa.pub $ cat id_rsa.pub >> ./authorized_keys $ chmod 600 authorized_keys $ ls -l authorized_keys -rw------- 1 nobi nobi 744 Jul 1 18:38 authorized_keys $
authorized_keys を作ったら (今じゃなくてもいいけど) id_rsa.pub を削除する。
$ rm id_rsa.pub $
ssh サーバ側でパスワード認証を無効にする
/etc/ssh/sshd_config を vi で修正します。
$ cd /etc/ssh $ ls -l sshd_config* -rw------- 1 root root 4423 Jul 1 04:08 sshd_config -rw------- 1 root root 4425 Feb 5 01:01 sshd_config.org $ sudo cp -p sshd_config sshd_config.20200701 [sudo] password for nobi: $ sudo vi sshd_config
どこを修正したかというと、
$ sudo diff sshd_config.20200701 sshd_config 71c71 < #PasswordAuthentication yes --- PasswordAuthentication no 73d72 < PasswordAuthentication yes $
今回の場合、
- 71 行目の #PasswordAuthentication yes を PasswordAuthentication no に変更した
- 73 行目の PasswordAuthentication yes を削除した
の 2 箇所を変更しています。
ここで ssh サーバのプロセスを再起動します。
$ sudo systemctl restart sshd $ sudo systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-07-01 18:48:23 JST; 17s ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 3727 (sshd) Tasks: 1 (limit: 2851) Memory: 1.5M CGroup: /system.slice/sshd.service └─3727 /usr/sbin/sshd -D -4 -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -oMACs=hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-> Jul 01 18:48:23 ik1-417-40590.vs.sakura.ne.jp systemd[1]: Starting OpenSSH server daemon… Jul 01 18:48:23 ik1-417-40590.vs.sakura.ne.jp sshd[3727]: Server listening on 0.0.0.0 port 22. Jul 01 18:48:23 ik1-417-40590.vs.sakura.ne.jp systemd[1]: Started OpenSSH server daemon. Jul 01 18:48:34 ik1-417-40590.vs.sakura.ne.jp sshd[3731]: Received disconnect from ii.jj.kk.ll port 27883:11: [preauth] Jul 01 18:48:34 ik1-417-40590.vs.sakura.ne.jp sshd[3731]: Disconnected from authenticating user root ii.jj.kk.ll port 27883 [preauth] $
sudo systemctl status sshd で再起動後のプロセスの状態 (いつ起動されたか) を確認します。
ssh クライアントの config ファイルを修正する
以下はやり方の一例です。
$ pwd /Users/nobi/.ssh $ ls -l config -rw-r--r-- 1 nobi staff 244 Jun 30 18:57 config $ cp -p config config.20200701 $ vi config
vi で編集したあと cat してみると
$ cat config Host 172.16.1.2 HostName 172.16.1.2 User nobi IdentityFile ~/.ssh/ubuntu_rsa Host 172.16.1.3 HostName 172.16.1.3 User nobi IdentityFile ~/.ssh/raspi_rsa Host 172.16.1.4 HostName 172.16.1.4 User nobi IdentityFile ~/.ssh/linuxlite_rsa Host ww.xx.yy.zz HostName ww.xx.yy.zz User nobi IdentityFile ~/.ssh/SakuraVPSCentOS $
こんな具合である。
ssh クライアントから ssh ログインしてみる
$ ssh ww.xx.yy.zz Enter passphrase for key '/Users/nobi/.ssh/SakuraVPSCentOS': SAKURA Internet [Virtual Private Server SERVICE] Last login: Wed Jul 1 18:47:26 2020 from aa.bb.cc.dd $
ssh ログインできた!
SAKURA Internet [Virtual Private Server SERVICE]
と書かれていることから、さくらの VPS 環境のサーバにログインできたことがわかる。これで良し!