🍓

Raspberry Piへの公開鍵認証でのSSH接続 & VSCode Remote Developmentの設定方法

4 min read 1

Raspberry Pi に SSH(公開鍵認証)で接続するまで & VSCode の Remote Development の設定を備忘録としてまとめます。

公開鍵認証とは?

公開鍵認証とは、パスワードの代わりに 公開鍵と秘密鍵のペアを用いる認証方法です。
詳細は以下記事をご覧ください。

SSHの公開鍵認証における良くある誤解の話 - Qiita

キーファイルの作成

まずローカルでキーファイルを置くディレクトリを作ります(.ssh 直下に秘密鍵を置いておいても良いのですが、整理しておいたほうが後々楽なので)

mkdir ~/.ssh/raspberrypi

次にキーファイルをssh-keygenコマンドで作成します。

$ ssh-keygen -t rsa

ここで、鍵の作成場所を聞かれるので、先ほど作成したディレクトリを指定します。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kawamataryou/.ssh/id_rsa):

今回は /Users/kawamataryou/.ssh/raspberrypi/id_rsaと設定しました。

次に、パスフレーズを聞かれます。あったほうが安全なんですが、今回は省略します。
続けて Enter を押せば OK です。

Enter passphrase (empty for no passphrase):

これで.ssh/raspberrypi配下に秘密鍵のid_rsaと、公開鍵のid_rsa.pubが作成されます。
そして今作成したキーペアの内、公開鍵のid_rsa.pubを Raspberry Pi に送ります。

$ scp ~/.ssh/raspberrypi/id_rsa.pub pi@raspberrypi:~

パスワードを聞かれるので Raspberry Pi で初回ログインした際に設定したパスワードを入力してください。

Raspberry Pi側のsshの設定

ssh(Password 認証)で Raspberry Pi に接続します。

$ ssh pi@raspberrypi

次に ssh の鍵を管理する.sshディレクトリを作成します。

$ sudo mkdir ~/.ssh

そして、先ほど送ったid_rsa.pubauthorized_keysと名前を変更しつつ.sshに移動します。

$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

次に.ssh, authorized_keysのパーミッションを変更します。

$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh

600 は-rw-------で管理者のみ読み取り書き込みが可能、700 はxrw-------で管理者のみ実行読み取り書き込み可能です。
これをしないと ssh 接続の時に怒られるので必ず設定しましょう。

次にssh_confを修正して、ssh 接続を有効にしましょう。

$ sudo vi /etc/ssh/sshd_config

以下の行のコメントアウト削除して公開鍵認証を有効化してください。

AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

ここで、Port の変更や、Password 認証の OFF を行うとセキュリティ的に安心です。
Password 認証の OFF は、PasswordAuthentication no、Port の変更はPort (任意の数値)とすれば OK です。

最後に変更内容を反映させるため sshd を再起動します。
これで Raspberry Pi 側の作業は完了です。

$ sudo /etc/init.d/ssh restart

ssh configの修正

最後にローカル側での作業です。
この段階では、Raspberry Pi の秘密鍵を、.ssh直下に置いていないため毎回-iオプションで keyfile を指定する必要があります。
それは面倒なので config に設定を追記します。

~/.ssh/configを開き以下を追記します(config がなければ作成してください)。

Host raspi
  HostName raspberrypi
  User pi
  IdentifyFile ~/.ssh/raspberrypi/id_rsa

これで以下コマンドで公開鍵認証でのssh接続ができるようになっているはずです。

$ ssh raspi

今回は使わなかったのですが、.ssh/config を分割する方法もあります。
そちらを使ってさらに整理するのも良さそうです。詳細は以下をどうぞ。
https://qiita.com/masa0x80/items/ecb692ad93f7d06a07b0

VSCode Remote Developmentでの接続

ssh で接続して、Vim で開発でも良いのですがどうせならより使い慣れたエディタで開発したいですよね。その要望を叶えるのが VSCode の Remote Development です。
まるでローカルに環境があるかのように、Raspberry Pi の内部を VSCode で開けます。

まず、VSCode に Remoete Development のエクステンションをインストールします。

https://github.com/Microsoft/vscode-remote-release

インストールするとサイドバーに Remote Development のアイコンが追加されます。
アイコンをクリックするとタブが開くので、上部の REMOTE EXPLORER のセレクトボックスをSSH Targetsに設定します。
こうすると.ssh/configで設定しているホスト一覧が出るのであとは、先ほど設定したraspiをクリックするだけです。

クリックすると、別ウィンドウで VSCode が開き、Raspberry Pi に SSH 接続して環境を構築しはじめます。
初回は完了までしばらくかかります。

もしここで Timeout Error などで失敗する場合は、remote.SSH.useLocalServer": falseを VSCode の setting.json に追加しましょう。
そうすると接続時に、Remote Host の OS を聞かれるので Linux を選択すれば OK です。
https://github.com/microsoft/vscode-remote-release/issues/1721

完了後、EXPLORER のタブで Open Folder をクリックしてパス を指定して OK を押せば完了です。

まるでローカルにファイルがあるかのようにディレクトリ・ファイルが閲覧出来て VSCode 上でそのまま編集できます。最高便利!

おわりに

以上「Raspberry Pi への公開鍵認証での SSH 接続 & VSCode Remote Development の設定方法」でした。
Remote Development がとても便利ですね。VSCode すごい。

この記事に贈られたバッジ

Discussion

~/.ssh/config 内の
Host raspi
HostName raspberrypi
User pi
IdentifyFile ~/.ssh/raspberrypi/id_rsa
はIdentifyFile ではなくIdentityFile でしょうか。
後者にするとうまくできました。
初めてラズパイでSSHをやってみたのですが大変参考になりました。
ありがとうございます。

ログインするとコメントできます