Raspberry Piはデフォルトではパスワード認証でログインします。そこを公開鍵で接続できるようにします。
今回使う機器は以下になります。
- Raspberry Pi 3
- Windows 10 Home
PCとRaspberry Piは同ネットワーク上に接続してください。
鍵ペア(公開鍵と秘密鍵)ファイルの作成
Raspberry Piに接続するPC上(windows10)で鍵ペアのファイルを作成します。
ssh-keygen -t rsa
Enter file in which to save the key (C: ¥Users¥username/.ssh/id_rsa):#鍵の生成場所
Enter passphrase (empty for no passphrase):#パスワードの設定
コマンドのパラメータとして、”-t rsa”を指定してますが、これは鍵の種類を”RSA鍵”というものに指定することになります。
鍵の生成場所を聞かれますが、こだわりがなければデフォルトのままで大丈夫です。
設定するパスワードを入力すると、指定したフォルダにid_rsa(公開鍵)とid_rsa.pub(秘密鍵)が生成されます。(パスワードはなくても大丈夫です。)
公開鍵ファイルをRaspberry Piに送信し保存
Windows PCで作成した公開鍵ファイルをRaspberry Piに送信します。
‘id_rsa.pub’の方が公開鍵になります。間違えても秘密鍵を送らないでください。
PC側でscpコマンドを利用してRaspberry Piに公開鍵を送信します。
cd [公開鍵の場所 (デフォルトではC:\Users\[ユーザ名]/.ssh/id_rsa)]
scp id_rsa.pub [ユーザー名]@[RaspberryPiのIPアドレス]:~/
このコマンドで聞かれるパスワードはRaspberry Piにログインするためのパスワードになります。
scpコマンドに関してはこちらの記事を参考にしてください。
公開鍵のパーミッションを変更
Raspberry Pi側のホームディレクトリ直下に.sshフォルダを作成します。
mkdir .ssh
公開鍵ファイルは通常”authorized_keys”というファイルに追記していきます。
先ほど送った”id_rsa.pub"
を”authorized_keys"
という名前に変更しつつ".ssh"
に移動します。
mv id_rsa.pub .ssh/authorized_keys
“.ssh”と”authorized_kyes”のパーミッションを変更します。
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
600は-rw------
で管理者のみ読み取り書き込みが可能で、700はxrw------
で管理者の実行読み取り書き込みが可能です。
公開鍵認証で接続
最後にsshd_configを修正して、ssh接続を有効にします。
sudo nano /etc/ssh/sshd_config
以下の行のコメントアウトを削除して公開鍵認証を有効化し、パスワード認証を無効化します。
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
---------------------
PasswordAuthentication no
これで公開鍵認証での接続が可能になります。
PC側から以下のコマンドで、公開鍵認証でssh接続を確認します。
ssh [ユーザ名]@[RaspberryPiのIP] -i [秘密鍵のパス]
※秘密鍵のパスは、ファイル名まで記載します
(デフォルトでは「C:\Users\[ユーザ名]\.ssh\id_rsa」)
公開鍵認証のパスワードが要求されるので入力します。
各種ssh設定の変更
sshのセキュリティ向上のため、Raspberry Pi側の”sshd_config”のファイルを編集します。
フィルは以下のコマンドで編集します。
sudo nano /etc/ssh/sshd_config
接続ポート番号を変更
Port 22 → Port nnnnn
(自由に利用できる番号として、公式には 49152 – 65535 が規定されている)
rootログインを無効化
PermitRootLogin prohibit-password→ PermitRootLogin no
パスワード認証を無効化
PasswordAuthentication yes → PasswordAuthentication no
認証設定の保存
このままではRaspberry Piの秘密鍵を".ssh"
下に置いていない場合、毎回”-i
“オプションでkeyfileを指定する必要があります。
それは面倒なので、configに設定を追記します。
PC側の”.ssh
“フォルダ下に、以下の内容の"config"
ファイルを作成します。
Host [ホスト名](接続時に使う任意の名前)
HostName [Raspberry PiのIPアドレス]
User [Raspberry Piのユーザ名]
Port [sshのポート番号]
IdentityFile [秘密鍵ファイルのパス]
これで以下のコマンドでssh接続できるようになります。
ssh [ホスト名]
公開鍵認証のパスワードが求められるので、入力し接続されます。