[Debian 10] ssh サーバの認証方法をパスワード認証から公開鍵認証に変更した
前書き
ConoHa VPS 上で稼働させている Debian を使う時、ssh でログインして各種操作をしているが、ログインする際の認証方法がパスワード認証なのでこれを公開鍵認証に変更する。
やることは先日書いた CentOS 8 の記事 と同様 (ほとんど、もしくは全く同じ) になると思うので本投稿ではさらっと記載するにとどめたい。よければ CentOS の記事も参考にしてほしい。
ssh クライアントで秘密鍵と公開鍵 = 鍵ペアを作る
僕は ssh クライアントとして MacBook Pro を使うので、この 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:GEl7/u0vKFq237r2j9x7mxl3OWuKs/L00MzYO0HsFnI nobi@nobis-mbp.lan The key's randomart image is: +---[RSA 4096]----+ | . | | . o | | + . . | | = . E | | . S = . | | . .+ . | | o .=o=.+o | | o.o+==+..X | | …+BOBOB. | +----[SHA256]-----+ $ ls -l id* -rw------- 1 nobi staff 3434 Jul 9 11:50 id_rsa -rw-r--r-- 1 nobi staff 744 Jul 9 11:50 id_rsa.pub $
秘密鍵のファイル名を変える。
$ mv id_rsa ConoHaVPSDebian
ssh サーバの下準備 (.ssh ディレクトリを作る)
Debian 側で .ssh ディレクトリを作ります。ここに MacBook Pro で作った公開鍵 (id_rsa.pub) を保管するのである。
$ cd $ mkdir .ssh $ chmod 700 .ssh $ ls -ld .ssh drwx------ 2 nobi nobi 4096 Jul 9 11:56 .ssh $
公開鍵を ssh サーバに scp で送る
$ ls -i id_rsa.pub 58776427 id_rsa.pub $ scp ./id_rsa.pub nobi@ww.xx.yy.zz:/home/nobi/.ssh nobi@ww.xx.yy.zz's password: id_rsa.pub 100% 744 112.8KB/s 00:00 $
送ってしまえば公開鍵を MacBook Pro が持っておく必要がないので削除する。
$ rm id_rsa.pub
ssh サーバで authorized_keys ファイルを作る
$ ls -l id_rsa.pub -rw-r--r-- 1 nobi nobi 744 Jul 9 11:59 id_rsa.pub $ cat id_rsa.pub >> ./authorized_keys $ chmod 600 authorized_keys $ ls -l authorized_keys -rw------- 1 nobi nobi 744 Jul 9 12:03 authorized_keys $ rm id_rsa.pub $
authorized_keys ファイルを作ったら id_rsa.pub は要らないので rm で削除した。
ssh サーバでパスワード認証を無効にする
/etc/ssh/sshd_config の修正。
$ cd /etc/ssh $ sudo cp -p sshd_config sshd_config.20200709 [sudo] password for nobi: $ sudo vi sshd_config
vi で修正した後 diff で差分を確認する。
$ diff sshd_config.20200709 sshd_config 56c56 < PasswordAuthentication yes --- > PasswordAuthentication no $
ssh サーバのプロセスを再起動します。
$ sudo systemctl restart sshd $ sudo systemctl status sshd ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-07-09 12:10:10 JST; 10s ago Docs: man:sshd(8) man:sshd_config(5) Process: 9694 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 9695 (sshd) Tasks: 1 (limit: 541) Memory: 6.6M CGroup: /system.slice/ssh.service └─9695 /usr/sbin/sshd -D Jul 09 12:10:10 systemd[1]: ssh.service: Found left-over process 9688 (sshd) in control group whi Jul 09 12:10:10 systemd[1]: This usually indicates unclean termination of a previous run, or serv Jul 09 12:10:10 sshd[9695]: Server listening on 0.0.0.0 port 22. Jul 09 12:10:10 sshd[9695]: Server listening on :: port 22. Jul 09 12:10:10 systemd[1]: Started OpenBSD Secure Shell server. Jul 09 12:10:11 sshd[9687]: Failed password for root from 218.92.0.201 port 12196 ssh2 Jul 09 12:10:15 sshd[9687]: Failed password for root from 218.92.0.201 port 12196 ssh2 Jul 09 12:10:17 sshd[9687]: Received disconnect from 218.92.0.201 port 12196:11: [preauth] Jul 09 12:10:17 sshd[9687]: Disconnected from authenticating user root 218.92.0.201 port 12196 [p Jul 09 12:10:17 sshd[9687]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh rus $
再起動したあとのステータスを見ると 10 秒前に ssh サーバが起動したことがわかります。
あと、Failed password for root from 218.92.0.201 port 12196 ssh2 とログが出ています。
これは誰かが勝手に ssh で root ログインしようとして失敗した、なログだと思います。なんどか sudo systemctl status sshd を叩けば、いろんな IP から ssh でログインしようとしてくるのがわかるでしょう。
ssh クライアントの config ファイルを修正する
$ cd $ cd .ssh $ cp -p config config.20200709 $ vi config
vi で編集した後はご覧の通り。
$ 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 Host aa.bb.cc.dd HostName aa.bb.cc.dd User nobi IdentityFile ~/.ssh/ConoHaVPSDebian $
ssh クライアントからログインできるか確認する
$ ssh ww.xx.yy.zz Enter passphrase for key '/Users/nobi/.ssh/ConoHaVPSDebian': Linux ww.xx.yy.zz 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Jul 9 11:22:42 2020 from aa.bb.cc.dd $
Enter passphrase と聞いてきています。これは公開鍵認証を求められていることを示します。鍵ペアを作るときに入力したパスフレーズ (パスワードみたいなもの) を正しく入力することで ssh ログインができました。