[Ubuntu] ssh サーバの認証方式をパスワード認証から公開鍵認証に変更する方法
前書き
すでに ssh サーバとしての設定ができている Ubuntu パソコン (Ubuntu 18.04) がある。ssh クライアント (MacBook Pro や MacBook を使っている) が Ubuntu に ssh でログインする時に使っている認証方式はパスワード認証だ。
本投稿では、このパスワード認証を公開鍵認証に変更する方法を書いていく。そして、今後は MacBook Pro からのみ Ubuntu への ssh ログインができるようにするため、MacBook Pro で鍵ペア (公開鍵と秘密鍵) を作る。
結局、ssh の公開鍵とか秘密鍵ってなんですか?
僕は以前、ssh の公開鍵認証が「よーわからん」と思っていた時期がありました。なんでよーわからんのか、その理由もわからなかったです。
しかし今は当時僕がわからなかった理由がはっきりとわかっています。
それは、「公開鍵ってなんですか?」「秘密鍵ってなんですか?」「公開鍵認証ってなんですか?」これらの疑問に対する答えを持ち合わせていなかったのです。
- 秘密鍵? –> 実態はただのファイルです
- 公開鍵? –> これも実態はただのファイルです
- 鍵ペア? –> 秘密鍵と公開鍵のセットのことです
これをまず頭に入れる。そして、秘密鍵と公開鍵は必ずお互いがセットになっています。
で、公開鍵認証ってなんですか?
- まず ssh クライアント側で鍵ペアを作ります (厳密には ssh クライアント側で作らなくても構いませんがそこには触れません)
- そして公開鍵を ssh サーバへ何らかの手段で渡し、秘密鍵は自分 (ssh クライアント側) に保管しておきます
- ssh サーバは公開鍵とペアになっている秘密鍵を持っている ssh クライアントしかログインさせないように動作します
単純かつ少々乱暴に言うとこれが公開鍵認証です。このイメージをもっていればとりあえずの理解としては大丈夫です。
最初にパスワード認証で ssh ログインする
パスワード認証で ssh ログインできていたことを確認しておきます。
$ ssh nobi@172.16.1.2 nobi@172.16.1.2's password: Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-59-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * "If you've been waiting for the perfect Kubernetes dev solution for macOS, the wait is over. Learn how to install Microk8s on macOS." https://www.techrepublic.com/article/how-to-install-microk8s-on-macos/ * Canonical Livepatch is available for installation. - Reduce system reboots and improve kernel security. Activate at: https://ubuntu.com/livepatch 22 個のパッケージがアップデート可能です。 0 個のアップデートはセキュリティアップデートです。 Your Hardware Enablement Stack (HWE) is supported until April 2023. Last login: Mon Jun 22 22:04:46 2020 from 10.1.0.2 $
上記の 2 行目で ssh サーバ = Ubuntu がパスワードを聞いてきていることから、まだ Ubuntu が ssh アクセスをパスワード認証でログインの可否を判断していることがわかります。
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:zQ4Ps5SimsgG/yHmESVtqQpOepO2l6ECFlxI4WQkQTQ nobi@nobis-mbp.lan The key's randomart image is: +---[RSA 4096]----+ |BEo | |=..o . | |..o = | | o = + | |..+ . S o | |Bo o.. o B | |oO.oo . o | |oBoBo. | |oo=o. | +----[SHA256]-----+ $ ls -l id* -rw------- 1 nobi staff 3434 Jun 24 01:53 id_rsa -rw-r--r-- 1 nobi staff 744 Jun 24 01:53 id_rsa.pub $
ssh-keygen コマンドで鍵ペアを作っています。4 行目と 5 行目でパスフレーズの入力を求められるので入力します。
パスフレーズはパスワードみたいなものですが、パスワード認証の時に使っていたパスワードとは全くの別物です。ただし、パスワード認証の時に使っていたパスワードをパスフレーズに設定することは可能です。(ややこしいかな)
いずれにしても鍵ペアができました。file コマンドを実行してみます。
$ file id_rsa id_rsa: OpenSSH private key $ file id_rsa.pub id_rsa.pub: OpenSSH RSA public key $
id_rsa が秘密鍵で id_rsa.pub が公開鍵であることがわかります。
僕は秘密鍵のファイル名を変更したいので ubuntu_rsa とかに変更します。もし Ubuntu 以外の ssh サーバも稼働させている時にその ssh サーバも公開鍵認証を使っていたら、id_rsa のままだとファイル名がかぶってしまうからです。
公開鍵はそのままのファイル名にして次に進みます。
公開鍵を ssh サーバに渡す
やり方はいろいろありますが、scp コマンドを使って Ubuntu にファイルを転送します。この時、.ssh ディレクトリ (以下の例だと /home/nobi/.ssh ディレクトリ) が存在している必要があります。
k$ scp ./id_rsa.pub nobi@172.16.1.2:/home/nobi/.ssh nobi@172.16.1.2's password: id_rsa.pub 100% 744 202.9KB/s 00:00 $
Ubuntu 側でファイルが送られてきていることを確認します。
$ pwd /home/nobi/.ssh $ ls -l id_rsa.pub -rw-r--r-- 1 nobi nobi 744 Jun 24 02:07 id_rsa.pub $
id_rsa.pub = MacBook Pro で作った公開鍵が Ubuntu に届いていることがわかります。
MacBook Pro で作った公開鍵の内容を authorized_keys ファイルに cat コマンドでアペンドします。
$ cat id_rsa.pub >> authorized_keys $ chmod 600 authorized_keys $ ls -l authorized_keys -rw------- 1 nobi nobi 744 Jun 24 02:39 authorized_keys $
id_rsa.pub ファイルはもう要らないので rm で削除しておきます。
ssh サーバ の /etc/ssh/sshd_config を修正
まず sshd_config ファイルのバックアップを作って、
$ pwd /etc/ssh $ ls -l sshd* -rw-r--r-- 1 root root 3264 Mar 4 2019 sshd_config $ sudo cp -p sshd_config sshd_config.org $
ssh サーバ = Ubuntu の /etc/ssh/sshd_config ファイルを vi などで修正します。修正内容は以下のようになります。
$ diff sshd_config.org sshd_config 56,57c56,57 < #PasswordAuthentication yes < #PermitEmptyPasswords no --- PasswordAuthentication no PermitEmptyPasswords no $
#PasswordAuthentication yes の行を PasswordAuthentication no に変更
#PermitEmptyPassword no の行を PermitEmptyPasswords no に変更
しました。
sshd を再起動します。
$ sudo systemctl restart ssh.service $
ssh クライアントの config ファイル修正、もしくは作成
ssh クライアント側で config ファイルを作成する。
MacBook Pro の場合、ホームディレクトリ配下の .ssh ディレクトリに config というファイルを作る。中身は以下のようなものだ。
$ pwd /Users/nobi/.ssh $ ls -l config -rw-r--r-- 1 nobi staff 161 Jun 24 02:20 config $ 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 $
この config ファイルでは、
- 172.16.1.2 に ssh 接続する際は、ubuntu_rsa 秘密鍵を使い
- 172.16.1.3 に ssh 接続する際は、raspi_rsa 秘密鍵を使う
といった制御を行っている。
ssh 接続する時のユーザー名を User の行で指定しているので、以下のようにユーザー名を指定しないで ssh サーバにログインすることができる。
$ ssh 172.16.1.2 Enter passphrase for key '/Users/nobi/.ssh/ubuntu_rsa': Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-59-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * "If you've been waiting for the perfect Kubernetes dev solution for macOS, the wait is over. Learn how to install Microk8s on macOS." https://www.techrepublic.com/article/how-to-install-microk8s-on-macos/ * Canonical Livepatch is available for installation. - Reduce system reboots and improve kernel security. Activate at: https://ubuntu.com/livepatch 22 個のパッケージがアップデート可能です。 0 個のアップデートはセキュリティアップデートです。 Your Hardware Enablement Stack (HWE) is supported until April 2023. Last login: Wed Jun 24 02:42:20 2020 from 10.1.0.2 $
2 行目に
Enter passphrase for key ‘/Users/nobi/.ssh/ubuntu_rsa’:
とあります。まずポイントとして、パスワードではなくパスフレーズを聞いてきています。パスワード認証じゃなくなっていますね。
ubuntu_rsa に対するパスフレーズを聞いてきています。鍵ペアを作った時に入力したパスフレーズです。それを正しく入力すると上記のように認証が通り Ubuntu にログインができたわけである。
もし他に ssh クライアントになりえるパソコンがあれば、そちらから「Ubuntu に ssh 接続できないこと」を確認しておくと安心だろう。