Raspbian Jessie Lite の SSH/公開鍵認証 設定

Raspbian Jessie Lite に SSH 公開鍵認証 の 設定を行います.

作業環境

  • Windows 7
  • Raspbian Jessie Lite

使用するアルゴリズムの選択

なるべく強度が高く安全なものを使いたいので、今回は Ed25519、エドワーズ曲線デジタル署名アルゴリズム を 使うことにします.

アルゴリズムや強度については、こちらの記事を参考にさせて頂きました. RSA で 鍵長を増やすことばかり考えていましたが、勉強になりました. ありがとうございます.

キー・ペア の 生成

ssh-keygen を 使い、キー・ペアを生成します. ed25519 は 鍵長 が 256 bit 固定とのことなので、-t ed25519 のみの指定となります.
ファイルの場所は特に問題ないのでデフォルトのままにしました. パスフレーズは設定したほうが安全です. 秘密鍵のファイルをとられてしまうと、守るものがなくなり素通しとなってしまいます.
ssh-keygen は Microsoft が 開発している Win32-OpenSSH を 使いました. (2017年3月13日 追記)

1
c:\> ssh-keygen -t ed25519 -C ""
2
Generating public/private ed25519 key pair.
3
Enter file in which to save the key (C:\Users\[username]/.ssh/id_ed25519):
4
Enter passphrase (empty for no passphrase):
5
Enter same passphrase again:
6
Your identification has been saved in C:\Users\[username]/.ssh/id_ed25519.
7
Your public key has been saved in C:\Users\[username]/.ssh/id_ed25519.pub.
8
The key fingerprint is:
9
SHA256:T69X1O58qiKv7Sp/aPJTI+PpzUdOZDO+EcD5ldc8ON8
10
The key's randomart image is:
11
+--[ED25519 256]--+
12
|         . .  .o.|
13
|          +  oo.+|
14
|           o .ooo|
15
|            B ..E|
16
|        S .+ = . |
17
|        ooo.= . .|
18
|       . *.=.+ o |
19
|      o B+o.=   +|
20
|       B*OB+...XX|
21
+----[SHA256]-----+

公開鍵 を Raspberry Pi へ 送る

生成したキーペアで認証ができるように公開鍵を Raspberry Pi へ 送ります.
ssh-copy-id コマンド が あると、簡単に転送できるのですが Windows 7 および Microsoft の Win32-OpenSSH では ssh-copy-id が ないので、scp で 転送してから、SSH 接続して鍵登録をします.

1
c:\> scp %USERPROFILE%\.ssh\id_ed25519.pub pi@raspberrypi.local:~
2
pi@raspberrypi.local's password: [PASSWORD]
3
id_ed25519.pub                     100%   83     0.1KB/s   00:00

SSH で Raspberry Pi で接続し、公開鍵の設定をします.

1
pi@raspberrypi:~ $ mkdir ~/.ssh
2
pi@raspberrypi:~ $ chmod 700 ~/.ssh
3
pi@raspberrypi:~ $ cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
4
pi@raspberrypi:~ $ chmod 600 ~/.ssh/authorized_keys
5
pi@raspberrypi:~ $ rm -f ~/id_ed25519.pub

Raspberry Pi の SSH サーバ 設定

公開鍵で認証できるようになったので、パスワード認証を止めます.
合わせて root ユーザ の ログインも禁止します. (パスワードも公開鍵もないのでログインのしようもないのですが明示的に止めておきます)
以下に設定部分を抜粋します.

1
pi@raspberrypi:~ $ sudo nano /etc/ssh/sshd_config
2
# Authentication:
3
PermitRootLogin no
4
RSAAuthentication no
5
6
# Change to no to disable tunnelled clear text passwords
7
PasswordAuthentication no

設定後 SSH サーバ を 再起動します. 再起動する前に公開鍵認証でログインできていることを再度確認しておきます. パスワード認証が行えなくなるため、公開鍵認証で入れないと SSH で ログインできなくなります.

1
pi@raspberrypi:~ $ sudo systemctl reload ssh

pi ユーザ の パスワード削除

ついでに pi ユーザ の パスワードを削除します. これにより、Raspberry Pi へのアクセスは SSH からの 公開鍵認証 に しぼることができます. (ネットワーク障害などで完全に入れなくなることもありますが、その際には諦めるということで…)
とはいえ シングル・ユーザ・モード や 本体ごと or SD カード を 持っていかれれば簡単に入られてしまいますが、デフォルトで誰でも知っているパスワードを持っている必要もないので消しておきます.

1
pi@raspberrypi:~ $ sudo cat /etc/shadow | grep pi
2
pi:$7$anh205TS$KBB826BAAEqF/kSsT71NkzkaBAjh8bbKrnn6b4oikeABwQTPHHoGRnaXXX.KX9MEn1eDm9XMSurRWiqg1pVXXX/:17067:0:99999:7:::
3
4
pi@raspberrypi:~ $ sudo passwd -d pi
5
6
pi@raspberrypi:~ $ sudo cat /etc/shadow | grep pi
7
pi::17067:0:99999:7:::


Raspberry Pi 3

ラズパイを始めるには 全部入りの Raspberry Pi 3 が 手ごろではないでしょうか. Raspberry Pi Zero - ラズベリー・パイ ゼロRaspberry Pi Zero W - ラズベリー・パイ ゼロ W は 国内では入手しずらいため値上がりしてしてますし、GPIO ピン も 自分で付ける必要があったりと色々と手がかかります. その分楽しいというのもありますが.
届くまで時間がかかってもよい場合は こちら Raspberry Pi Zero の 購入 で 記事にしました Pimoroni さん から購入する手もあります.

Raspberry Pi 3 の 電源

Raspberry Pi 3 は 5V/3A の 電源が必要になります. スマホの充電アダプタでは出力が足りない場合もあるので確認が必要です.

マイクロ SD カード

ラズパイ の OS や ストレージに必要です. 16GB あれば十分だと思いますが、用途次第なので お好みのサイズで用意します.


これで、だいリモートアクセスを保護できるようになりました. ラズパイ自体が小さく(特に Zero)、また IoT デバイス のように使ったりするつもりなので シングルモード や SD カードが心配なので、追々調べていきます.