【Raspberry Pi】公開鍵認証でSSH接続する方法(ラズパイのセキュリティ設定)
この記事では、Raspberry PiにSSH接続をするための初期設定について述べます。
登場するマシンは、ローカルホストとRaspberry Piです。
ローカルホスト : 自分のパソコン(WindowsとかMacとか)
SSHの初期設定は以下の流れで行います。[ ]内は作業を行うマシンを指しています。
- [Raspberry Pi] SSH接続機能をONにする
- [Raspberry Pi] Raspberry PiのIPアドレスを確認する
- [ローカルホスト] 公開鍵と秘密鍵を作る
- [Raspberry Pi] 作った公開鍵を登録する
- [ローカルホスト] SSH接続する
Raspberry Pi のSSH接続をONにしたあとは、Raspberry Pi側の操作はローカルホストからSSH接続で操作しても大丈夫です。
Raspberry PiにSSH接続するには、パスワード認証と公開鍵認証の2つがありますが、ここでは公開鍵認証を使うことにします。
Raspberry Pi の SSH接続機能をONにする
(Raspberry Pi OS インストール時にONにしている場合は不要です。)
まずRaspberry Piにログインします。
次にホーム画面左上のRaspberry Pi のアイコンをクリックしてから
Preferences → Raspberry Pi Configurationの順に進みます。
表示されたウィンドウからInterfacesを選択し、SSHのスイッチを右側にしてをSSH機能を有効にします。
これでRaspberry Piにパスワード認証でSSH接続できるようになりました。
SSH接続はするには、まず自分のパソコンでターミナルを開きます。
Windowsの場合はタスクバーの検索欄に「ターミナル」、または「Powershell」と入力するとその名前のアプリが出てくるので起動します。
そして、ssh コマンドを使ってSSH接続します。
$ ssh UserName@***.***.xx.yy
UserNameにはRaspberry Piのユーザ名を入れてください。
***.***.xx.yyにはRaspberry PiのIPアドレスが入ります。
Raspberry PiのIPアドレスの調べ方は次に説明します。
これを実行するとパスワードを聞かれるので入力すればRaspberry Piにパスワード認証でSSH接続することができます。
Raspberry PiのIPアドレスを確認する
次にRaspberry PiのIPアドレスを確認します。
IPアドレス : ウェブ上の住所のこと
Raspberry Pi でターミナルを開いて、以下のように ip コマンドを使ってIPアドレスを確認します。
このとき、Raspberry Piがインターネットに接続していることを確認してください。
$ ip -4 a
すると、以下のような出力が出てきます。
wlan0: *************************
inet 192.168.xx.yy/24 *******
******************
(重要な部分以外は * で省略しています。)
これは無線LANでインターネットに接続している場合ですが、
wlan0という項目のなかの inetの横に書いている
inet 192.168.xx.yy/24
がIPアドレスです。
このうち、/24を取り除いたIPアドレス(192.168.xx.yy)をどこかにメモしておいてください。
有線LAN接続の場合はeth0の項目にIPアドレスが書いています。
公開鍵認証のための鍵を作る
初期設定ではパスワード認証になっていますが、
今回は公開鍵認証という方式でRaspberry Piにログインすることにします。
公開鍵認証: 秘密鍵を持っているPCの接続のみを許可する方式
公開鍵認証にはこの2つの鍵を作る必要があります。
- 公開鍵 : Raspberry Piに置く鍵
- 秘密鍵 : 自分のパソコンに置く鍵
要するに、公開鍵に合う鍵(=秘密鍵)を持っている人だけが入れる扉みたいなイメージですね。
この鍵を作るには自分のパソコン上のターミナルでコマンドを打つ必要があります。
まずは自分のパソコンでターミナルを開きます。
ここに以下のコマンドを打ってカギを公開鍵と秘密鍵を生成します。
$ ssh-keygen -t rsa
これを実行すると、以下のようなテキストが出てきます。
Enter file in which to save the key(***):
「鍵を保存する場所を教えてね」ってことなのですが、特にこだわりがなければ何も入力せずにEnterで大丈夫です。
その場合は (***) に書かれている通り、デフォルトの場所(.sshという隠しフォルダ)に鍵が生成されます。
そのあと、パスフレーズを設定するので、任意の文字列を設定します。
これはSSH接続時に入力するフレーズでパスワードみたいなものです。
これで2つの鍵を作ることができます。
エクスプローラでそのフォルダを覗くと、「id_rsa」と「id_rsa.pub」というファイルが作られていることがわかります。
このうち、拡張子が何もないファイルが秘密鍵、.pubの拡張子付きのファイルが公開鍵です。
鍵が作れたら、公開鍵をRaspberry Piに移動させます。
USBメモリなどで移動させても大丈夫ですし、scpというコマンドで移動させることもできます。
まずは、cdコマンドでホームディレクトリに移動します。
$ cd ~
次に.sshフォルダにあるid_rsa.pubを Raspberry Piにscpコマンドで移動させます。
$ scp .ssh/id_rsa.pub UserName@***.***.xx.yy:~/
UserNameにはRaspberry Piのユーザ名を入れてください。
***.***.xx.yyには先ほど調べたRaspberry PiのIPアドレスが入ります。
192.168.1.1みたいなやつですね。
最後にRaspberry Pi側で操作してホームディレクトリを見て、id_rsa.pubというファイルがあれば成功です。
Raspberry Pi に公開鍵を登録する
次はRaspberry Piに先ほど送信した公開鍵 id_rsa.pub の内容を登録していきます。
まず、Raspberry Pi にログイン後、ターミナルを開きます。
そこで、mkdir コマンドで ssh という隠しフォルダを作ります。
$ mkdir .ssh
フォルダが作れたら、鍵の登録先になる authorized_keys というファイルを .ssh フォルダの中に作ります。
これはtouch コマンドで以下のように作ることができます。
$ touch .ssh/authorized_keys
次は .sshフォルダと authorized_keys の権限設定をします。
設定する権限は以下の通りです。
- .ssh → 所有者のみが読み込み(read)、書き込み(write)、実行(execute)可能
- authorized_keys → 所有者のみが読み込み(read)、書き込み(write) 可能
chmod コマンドを使って次のように設定していきます。
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
最後に、authorized_keys に公開鍵を書き込みます。
cat コマンドで authorized_keys にid_rsa.pubの内容を追記します。
$ cat id_rsa.pub >> .ssh/authorized_keys
以上で公開鍵認証の設定は完了です。
公開鍵認証でSSH接続できるか確認
最後に公開鍵認証でSSH接続できるかを確認します。
自分のパソコン上でターミナルを開いて、ssh コマンドで公開鍵認証でSSH接続します。
$ ssh UserName@192.168.xx.yy -i .ssh/id_rsa
パスワード認証のときとは違い、-i 以下で秘密鍵を指定しています。
これでSSH接続が無事にできれば成功です。
まとめ
この記事ではRaspberry Piに公開鍵認証でSSH接続する方法を説明しました。
今回の設定ではパスワード認証を禁止してはいませんが、それを禁止してRaspberry Piに公開鍵認証でしかアクセスできないようにすることもできます。
パスワード認証を禁止する方法については以下の記事で解説していますのでご覧ください。