はじめに
パスワード認証での SSH は手軽ですが、総当たり攻撃に弱く、毎回パスワードを入力する手間もあります。公開鍵認証に切り替えれば、より安全に、かつパスワード入力なしでログインできます。ここでは Raspberry Pi を例に、公開鍵認証を有効にする手順をまとめます。
1. 鍵ペアを作成する
クライアント側で SSH の鍵ペア(秘密鍵と公開鍵)を作成します。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gekal/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/gekal/.ssh/id_rsa.
Your public key has been saved in /home/gekal/.ssh/id_rsa.pub.
秘密鍵(
id_rsa)は絶対に外部へ渡さないでください。相手に登録するのは公開鍵(id_rsa.pub)だけです。
2. 公開鍵をサーバーに登録する
ssh-copy-id を使うと一発で登録できます(この操作だけはパスワード入力が必要です)。
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@raspberrypi.local
ssh-copy-id が使えない環境では、サーバーにログインして手動で登録します。
mkdir -p ~/.ssh
echo "ssh-rsa AAAA... (公開鍵の内容)" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3. 鍵でログインできることを確認する
パスワードを求められずにログインできれば成功です。
$ ssh pi@raspberrypi.local
Linux raspberrypi 4.19.97-v7l+ ... armv7l
...
Last login: Tue Apr 7 09:36:16 2020
4. config で接続を簡略化する
~/.ssh/config に設定を書いておくと、ssh raspberrypi.local だけで接続できます。
Host raspberrypi.local
HostName raspberrypi.local
User pi
Port 22
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
LogLevel FATAL
config の各項目の意味は SSH の config ファイルを使いこなす にまとめています。
VS Code からのリモート接続
VS Code の Remote-SSH 拡張を使えば、この config をそのまま利用してリモート接続できます。コマンドパレットから「Remote-SSH: Connect to Host...」を実行し、raspberrypi.local を選ぶだけです。
初回接続時は、リモート側に VS Code Server をダウンロードするため、少し時間がかかります。