Windows 10からRaspberry PiにSSH接続してみる(公開鍵認証)

はじめに

Raspberry Piを操作するのに、ディスプレイをつないでいたら面倒です。そこで、SSH接続により他のPCからRaspberry Piに接続する方法をメモしておきたいと思います。また、よりセキュアな通信を行うために、BASIC認証ではなく、公開鍵認証にて接続を行います。

1. SSHの設定(Raspberry Pi側)

ブートディレクトリにSSHディレクトリを用意します。

sudo touch /boot/ssh

次に、[設定] -> [Raspberry Piの設定]からSSH有効にしておきます。

image.png (114.2 kB)

リブート後、以下のような警告メッセージが出る場合、パスワードが初期値になっているので、変更しておきましょう。

image.png (55.3 kB)

ちなみに、デフォルトでは以下のUserとPasswordになっています。

User Password
pi raspberry

[設定] -> [Raspberry Piの設定]からパスワードの変更を行えます。

image.png (143.4 kB)

以上でRaspberry Pi側の設定は終わりです。

2. Windows 10からRaspberry PiSSH接続する(Windows 10側)

今回は、WinSCPを使って接続してみたいと思います。 WinSCPをインストールしていない場合は、以下からダウンロード&インストール。

winscp.net

ホスト名にRaspberry Pi側のIPアドレス、ユーザ名とパスワードを設定し、ログインボタンをクリックします。

image.png (24.7 kB)

すると、以下のように接続できていると思います。

image.png (85.3 kB)

以上で、Windows 10側からのBASIC認証によるSSH接続は完了です。

3. 公開鍵認証でSSH接続

BASIC認証だとセキュアとは言えないので、今回は公開鍵認証でSSH接続する方法についても言及します。

Windows 10側

まず、Windows 10側で公開鍵と秘密鍵のペアを作ります。

OpenSSHを使おうと思うので、Gitがインストールされていることを前提としています。 Gitをインストールしていない場合は、以下からダウンロード&インストール。

https://git-scm.com/

Git Bashから、以下のコマンドを実行します。 メールアドレスについては任意の値でOKです。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

保存先やパスワードの入力を求められますが、何も入力せずにEnterします。 すると、C:\Users\ユーザ名\.ssh直下に * id_sra (秘密鍵) * id_rsa.pub (公開鍵)

が作成されます。

image.png (105.1 kB)

WinSCPで公開鍵であるid_rsa.pubRaspberry Pi側に転送しておきます。

image.png (111.8 kB)

Raspberry Pi

先ほど転送した公開鍵をRaspberry Pi側に登録します。

# ホームディレクトリへ移動
cd /home/pi

# 公開鍵をRaspberry Pi側に登録
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys

# 権限を設定
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

SSHの設定ファイルを開きたいのですが、nanoやVimでもいいのですが、編集しやすいVSCodeを使います。まず、VSCodeをインストールしておきます。

# VSCodeのインストール
wget -O - https://code.headmelted.com/installers/apt.sh | sudo bash

# VSCodeの実行
code-oss

次に、SSH設定ファイルを開きます。

# 一時的に権限を変更
sudo chmod 666 /etc/ssh/sshd_config

# VSCodeで開く
code-oss /etc/ssh/sshd_config

(1) 公開鍵認証の設定

以下の2つについて、コメントアウトしているのは解除し、PubKeyAuthenticationyesに書き換えます。

PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile  .ssh/authorized_keys .ssh/authorized_keys2

(2) BASIC認証をできないようにする

コメントアウトしているのは解除し、PasswordAuthenticationnoに書き換えます。

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no

(3) Rootログインをできないようにする

コメントアウトしているのは解除し、PermitRootLoginnoに書き換えます。

PermitRootLogin no

SSHを再起動し、上記の設定を反映させます。

# 権限をもとに戻す
sudo chmod 644 /etc/ssh/sshd_config

# SSHの再起動
sudo /etc/init.d/ssh restart

Raspberry Pi側の作業を以上で終了です。

最後に、WinSCP秘密鍵を設定し、Raspberry Piに接続できるかどうか確認して見ましょう。 設定をクリックします。

image.png (25.2 kB)

SSHの認証から、秘密鍵を設定します。ppkしか対応していないと言われるので、素直にppkファイルに変換します。

image.png (31.2 kB)

設定を保存し、ログインします。公開鍵認証がうまく行っていれば、以下のようにSSH接続できているはずです。

image.png (66.7 kB)

参考

Raspberry Piに公開鍵認証を使ってssh接続する
https://tool-lab.com/2013/11/raspi-key-authentication-over-ssh/
[wip] Raspberry Piのセキュリティを高めてみた
https://qiita.com/yyano/items/126cff2e3c49b0006c43