Featured image of post ラズパイに公開鍵でSSHするようにした

ラズパイに公開鍵でSSHするようにした

パスワード打つのめんどい

家にあるラズパイにSSHできるようにしたはいいものの, 毎回パスワード入れるのも面倒だし真面目に考えたらセキュリティ的にもよろしくないので公開鍵認証で入るようにした.


やったことのまとめ

  • MacBookの公開鍵をラズパイ側に登録してログインできるようにした
  • ラズパイ側でパスワードログインを無効化した

つかうもの

  • Raspberry Pi 3 Model B+
    • SSHサーバー(入られる側)
    • OSはRaspbian(10.0)
    • IPは固定済み
  • MacBook
    • SSHクライアント(入る側)
    • opensshがあれば正直なんでもいい

構成

構成

Icons made by Smashicons from www.flaticon.com

公開鍵認証のざっくりとしたおさらい…
MacBook(クライアント)の秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を
ラズパイ(サーバー)の鍵リスト(authorized_keys)に登録する.
秘密鍵と公開鍵は1つのペアになっていて, それぞれ片方からもう片方を作成できないようになっている.
また, 秘密鍵と公開鍵を照らし合わせるとペアになっているかどうかを判別できるようになっているので,
MacBookからラズパイにSSHする際にはラズパイ側の鍵リストに事前に登録された公開鍵と
MacBookが持つ秘密鍵を照らし合わせ, ペアと認められた場合にログインを許可する(認証).

やったこと

公開鍵をラズパイ側に登録

まずはクライアント(MacBook)側で秘密鍵と公開鍵のペアを作成する.
すでに~/.ssh/id_rsa(秘密鍵)と~/.ssh/id_rsa.pub(公開鍵)がある場合は飛ばしていい.

# MacBookで実行

# 秘密鍵と公開鍵のペアを作成する
$ ssh-keygen
$ ls ~/.ssh
id_rsa         id_rsa.pub     known_hosts

次にMacBookの公開鍵をラズパイ側に登録する.

# 全てMacBookで実行

# ラズパイに公開鍵を保存するためのファイル(~/.ssh/authorized_keys)を作成
# ここではまだパスワード認証
$ ssh pi@192.168.3.200 "touch ~/.ssh/authorized_keys; ls ~/.ssh"
authorized_keys # このファイルにMacBookの公開鍵を書き込む
id_rsa          # これはラズパイの秘密鍵なので関係ない
id_rsa.pub      # 同じく関係なし
known_hosts     # 同じく関係なし

# ラズパイのauthorized_keysにMacBookの公開鍵を書き込んで権限を変更
# まだパスワード認証
$ cat ~/.ssh/id_rsa.pub | ssh pi@192.168.3.200 "cat >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh/authorized_keys"

# 念の為鍵が登録されたか確認
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAB3...wlj uzimihsr@macbook.local
# MacBookの公開鍵が登録されているのでパスワードを聞かれなくなっている
$ ssh pi@192.168.3.200 "cat ~/.ssh/authorized_keys"
ssh-rsa AAAB3...wlj uzimihsr@macbook.local

やったぜ.
これでパスワードなしでもSSHできるようになった.

パスワード認証を無効化

このままでもいいんだけど, セキュリティ的にパスワード認証はあまりよろしくない(総当りされたらクソ雑魚ナメクジ)ので,
パスワード認証を無効化する.
ラズパイの/etc/ssh/sshd_configを編集してパスワード認証の可否を変更する.

# 全てラズパイで実行

# SSHサーバー側の設定ファイルを編集
$ sudo vim /etc/ssh/sshd_config
...
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no # ここをyesからnoに変更
#PermitEmptyPasswords no
...

# 念の為sshd.serviceを再起動
$ sudo systemctl restart ssh.service

ちゃんとパスワード認証が無効化されているか確認する.
公開鍵認証ではクライアント(MacBook)の秘密鍵とサーバー(ラズパイ)に登録された公開鍵が対応していないと認証が通らないので,
MacBook側の秘密鍵を使えなくするとログインできなくなる.

# 全てMacBookで実行

# 秘密鍵の名前を変えて読めない状態にする
$ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bkup

# ラズパイにSSHを試みる
# MacBookの秘密鍵が使えず, パスワード認証が禁止されているので弾かれる
$ ssh pi@192.168.3.200
pi@192.168.3.200: Permission denied (publickey).

# 秘密鍵の名前をもとに戻して使えるようにする
$ mv ~/.ssh/id_rsa.bkup ~/.ssh/id_rsa

# 再びラズパイにSSHを試みる
# 今度は秘密鍵が使えるので問題なくログインできる
$ ssh pi@192.168.3.200
...
Last login: Thu Jan 23 23:24:24 2020 from ...

やったぜ.
これで鍵認証でしかログインできなくなった.

おわり

ラズパイでの作業がだいぶ楽になった.

おまけ

パソコンばっかりさわってるしもべに愛想をつかすそとちゃん