Raspberry Pi に鍵を使ってSSH通信

Raspberry PiのSSHを有効にした時は、ログイン方式はパスワードでのログインになりますが、SSH鍵を使ったログイン方式でさらにセキュリティを強化できます。 ここではSSH鍵を使う為の設定方法を記載しています。

Raspberry PiでSSH接続の有効化

Raspberry Pi側でSSH許可をしなければなりません。(*初期値は『SSH 無効』)
『設定』→『Raspberry Piの設定』→『SSH 有効』。

この状態では、パスワードでSSHログインできます。

Raspberry Pi でSSH鍵生成

TeraTermからパスワードでSSH接続している状態で以下実行します。(パスワードを使ったSSH接続方法はここを参考にしてください。

.sshディレクトリ作成

  1. /home/pi/.sshと作成 (~$ mkdir .ssh)
  2. .sshに権限を与える (~$ sudo chmod 700 .ssh)
  3. .sshに移動 (~$ cd .ssh)

SSH鍵生成

/home/pi/.ssh/で以下を実行する。*何故か、/home/pi/でssh-keygenを実行した時はSSH接続できなかったが、.sshで実行した時は接続できた。

ssh-keygen -t rsa

上記を実行すると、ファイル名を聞いてくるが、ファイル名は何も入力せずにEnterを押すと、/home/pi/.ssh/ディレクトリに、id_rsaファイル(秘密鍵)とid_rsa.pubファイル(公開鍵)が生成される。 ファイルが生成される前に、パスコードも聞いてきたのでPiのパスワードを入力した。 このパスコードがラズパイにSSH接続する時のパスフレーズの事。

/home/pi/.ssh/id_rsa
/home/pi/.ssh/id_rsa.pub

公開鍵を登録~権限付与

  1. ~/.ssh$ cat id_rsa.pub >> authorized_keys これで公開鍵を登録。
  2. sudo chmod 600 authorized_keys      アクセス権限を与えておく。 644とかにすると、SSHサーバー側で『Permissions 0644 for ‘/home/pi/.ssh/authorized_key’ are too open.』のエラーで通信できません。
  3. /etc/ssh/sshd_configファイルの以下部分をコメントアウトする。
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

秘密鍵をWindowsパソコンに転送

TeraTermのSSH SCPで転送するがファイルが/home/pi/の下に無いと転送できないみたいです。 /.sshの下で何をしても、no such file or directory foundエラーでSSH SCPで転送できませんでした。

  1. ~/.ssh$ mv id_rsa ../  で秘密鍵を /home/pi/に移動
  2. TeraTermの『ファイル(F)』→『SSH SCP…』を選択
  3. 下の『Receive』で、『From』に『id_rsa』を入れ、『To』に転送先を選択して『Receive』で転送
  1. 転送後にid_rsaを/home/pi/.ssh/に戻す。 ~pi$ mv id_rsa ./.ssh
  2. TeraTermを切断(~$ exit かFile(F)から切断)

TeraTermで秘密鍵を使って接続

TeraTermで接続し、以下の画面が出てきたら、『RSA/DSA/ECDSA/ED25519鍵を使う』を選び、保存した『id_rsa』ファイルを選択して、『OK』をクリック。

この場合、パスフレーズにはSSH鍵を生成した際のパスコードを入れる。

Raspberry PiでパスワードでのSSH接続を無効にする

上記コマンドで、『PasswordAuthentication』をコメントアウトして、『no』にして、Raspberry Piを再起動する。*viコマンドでの編集より、nanoでの編集の方がめっちゃ簡単です。 参考。

# PasswordAuthentication yes  #変更前です
PasswordAuthentication no

*これをすると、rootでのSSH接続はパスワード接続だったので、rootでのSSH接続は出来なくなります。 rootでもSSH接続するには/root/.ssh・ディレクトリを作り、/home/pi/.ssh/ディレクトリにあるid_rsaファイルとauthorized_keysファイルを/root/.ssh/ディレクトリにコピーするとrootでもSSH接続できるようになります。(セキュリティ上おすすめしませんが)

**セキュリティ上、/etc/ssh/ssh/sshd_configファイルの以下の部分を変更して、rootのSSH接続を禁止するのが良いと思います。 再起動が必要です。

# PermitRootLogin yes  #変更前です
PermitRootLogin no

*** rootのSSH接続を禁止しても、piでSSH接続して、su rootでrootにログインできます。

Windwos10に/.ssh/configで楽々SSH

/.ssh/configファイル場所

上記の設定が終わったら、sshのconfigファイルにssh接続の記述してみましょう。 Windows10の場合、以下のフォルダにconfigファイルを入れます。(拡張子は無し。) .sshフォルダがなければ、コマンドプロンプトから.sshフォルダを作るか、エクスプローラーの場合『.ssh.』と前後にドットを入れるとドットから始まるフォルダを作れます。

c:/ユーザー/あなたのユーザー名/.ssh/config

/.ssh/configファイル記述

configファイルに書き込むのは踏み台サーバとターゲットの外部サーバーの2つのホスト。 Hostの後ろのbastionやxserverはsshコマンドで呼び出す名前です。

#踏み台サーバーとなるラズパイ
Host bastion
     HostName 192.168.1.5
     User pi
     Port 22
     #Window10に保存したラズパイの秘密鍵のパス
     IdentityFile ~/Documents/IoT/Raspi/id_rsa

#踏み台サーバーから接続する外部サーバー(エックスサーバー)
Host xserver
     HostName sv1_ _ _ _.xserver.jp
     User xs4_ _ _ _ _
     Port 10022
     #Window10に保存したxserverの秘密鍵のパス。 バックスラッシュでもスラッシュでもいいみたいです。
     IdentityFile ~\Documents\IoT\Xserver\xs4_ _ _ _ _.key
     ProxyCommand ssh -W %h:%p bastion

パラメータ説明
Host適当なSSH接続名。
プロンプトから『ssh SSH接続名』で接続する時に使用する
HostNameホスト名
接続したいSSHサーバーのサーバ番号とドメインかIPアドレス
Port接続したいSSHサーバーのポート番号
通常ポート番号は22
22は攻撃されやすいので、エックスサーバのようにポート番号を変えているサーバーもある。
エックスサーバーは10022
UserSSH接続のユーザー名
ラズパイ(Raspbian)の場合はpi。(初期値)
エックスサーバーではサーバー番号と言っています。
IdentityFile鍵認証する秘密鍵ファイルのパス。
ファイル名も記述する。

コマンドプロンプトから ssh ホスト名で楽々接続

上を設定したら、Windows10のコマンドプロンプト(cmd)からssh xserverと入れると、ラズパイのSSH鍵を生成した時のパスフレーズ(=パスコード)を聞いてきます。 次にエックスサーバーのパスフレーズを聞いてきます。 この2つを入れたらもう繋がりました。 これだけで楽々です。

Windows10のバージョン20H1ではProxyCommand の次にsshコマンドで動作していますが、Windows10の違うバージョンでは、sshでは動作せず C:\Windows\System32\OpenSSH\ssh.exe としないといけない場合があるようです。

おまけ1:パスワードだけでRaspberry PiにSSH接続

ラズパイはSSH有効化した時は、ログインパスワード(パスコードではありません)でSSH接続できるようになっています。

Raspberry PiにパスワードでSSH接続

ホストのアドレスを入力してOKを押す。
*ポート#は22のまま。

次にユーザー名とパスフレーズ(この場合はパスワード)を入れてOKを押す。
*ユーザー名:pi(初期値)
パスフレーズ:piのログインパスワード

この様につながります。
rootでも同じようにつながります。
終了時は、『exit』で抜ける。

コメント

タイトルとURLをコピーしました