ncos1のブログ

適当にメモ代わりに残しています、間違い・説明不足等はコメントしてただければ修正・追記します。

Kona Linux Pi 4.0(trixie)で音楽サーバー再構築⑦・WindowsPCからのssh接続を公開鍵認証にする・複数端末の登録・管理メモ

Rassberry Pi Connectが使用できなくなった場合に、ssh接続ができないと復旧できないのでsshを常時有効化させることにする。

ncos1.hatenablog.com

 

ncos1.hatenablog.com

sshはセキュリティ的に問題が有るので、公開鍵認証にする。

 

ステップ 実行する場所 何をするか
1. 鍵を作る 操作する端末
WindowsPC
自分専用の「鍵のペア」を生成する
2. 公開鍵を渡す

操作する端末

WindowsPC

生成した「公開鍵」だけをサーバーに送る
3. ssh接続を
 鍵のみにする
操作されるPC パスワードでのログインを禁止する

 

1. 鍵を作る

WindowsのPowershellから実施

ssh-keygen -t ed2551

C:\Users\現在のユーザー名\.ssh 配下に以下のファイルが作成される。

id_ed25519
id_ed25519.pub

作成する際に、Enter passphrase (empty for no passphrase): となり、パスフレーズを設定可能だが省略しても良い。

id_ed25519.pubの記述は作成した鍵名、現在はEd25519固定と考えて良い。

アルゴリズム 推奨度 特徴
Ed25519 最高 現在最強。 高セキュリティかつ計算が速い。鍵の文字列が短く扱いやすい。
ECDSA 高い 電子政府などで使われる標準規格。Ed25519が使えない古い環境での代用。
RSA 普通 最も古く、互換性が高い。安全性を保つには鍵を長く(3072bit以上)する必要があり、動作が重い。

 

鍵の説明

ファイル名 種類 役割 扱い
id_ed25519.pub 公開鍵 サーバーに渡す「南京錠」

誰に見せても、

どこに置いてもOK

id_ed25519 秘密鍵 自分が持つ「本物の鍵」 絶対他人に見せない。
自分のPCに隠す

 

2:公開鍵を渡す

操作するPC(Windows powershell)から「公開鍵」をサーバーへ送る。
引き続き、操作するPCで以下のコマンドを入力。

cd C:\Users\ユーザー名\.ssh\

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh RaspberryPiのユーザー名@RaspberryPiのIPアドレスもしくはホスト名 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

 

* Linuxの場合ssh-copy-idコマンドで実施、例:ssh-copy-id RaspberryPiのユーザー名@サーバーのIPアドレスorホスト名

結果: サーバー側の特定の場所(~/.ssh/authorized_keys)に、公開鍵が自動的に書き込まれる。

 

RaspberryPiから確認

nano ~/.ssh/authorized_keys

内容例(id_ed25519.pubの内容と同じ、id_ed25519.pubはテキストエディタ等で開ける)

ssh-ed25519 鍵のコード ユーザー名@Windowsのホスト名

ユーザー名@Windowsのホスト名が判別しにくい場合は、編集可能。

SSHの仕組みでは、「2つ目の半角スペース」より後ろはすべてコメントとして扱われる。

【正しい書き方の例】
Plaintext

ssh-ed25519 AAAAC3...(略)...5J89 2026年3月18日 メインPC 自宅用

 

確認: この時点でpowershellから

ssh ユーザー名@RaspberryPiのIPアドレスもしくはホスト名

で、パスワードなしでログインできれば成功。

パスワード未入力で、PowershellのプロンプトがRaspberryPiのプロンプトに変わってコマンド入力できる。

 

TeraTermで接続

通常通り接続して、ユーザー名を入力する
「SSH認証」画面が表示されたら、サーバーの「ユーザー名」のみを入力。

認証方式を切り替える
デフォルトでは「パスワードを使う」にチェックが入っているが「RSA/DSA/ECDSA/ED25519鍵を使う」 に変更。

秘密鍵を選択する
「秘密鍵(K):」という項目の横にある 「...」ボタン を押します。

ファイルを探して開く
ファイル選択画面が開くので、PowerShellで作成した秘密鍵を選択します。

場所: C:\Users\(ユーザー名)\.ssh\

ファイル名: id_ed25519 (※末尾に .pub が付いていない方)

ログイン実行
「OK」を押せばログインできる。

ただし、通常では毎回同じ操作が必要なので手間が増えるので専用のショートカットを作成する。

適当な場所にTeraTermのショートカットを作成。

プロパティのリンク先に追記する。

現在

"C:\Program Files\teraterm5\ttermpro.exe"

に追記

/user=RaspberryPiのユーザー名 /auth=publickey /keyfile=C:\Users\Windowsのユーザー名\.ssh\id_ed25519

最終例

"C:\Program Files\teraterm5\ttermpro.exe" /user=RaspberryPiのユーザー名 /auth=publickey /keyfile=C:\Users\Windowsのユーザー名\.ssh\id_ed25519

起動して、ホスト名を確認して”OK”クリックでパスワード無しで接続できる。

 

3. 操作されるPCのssh接続許可を鍵のみにする    

操作される側(今回はRaspberryPi)

RaspberryPiの設定ファイル /etc/ssh/sshd_config を編集。

sudo nano /etc/ssh/sshd_config

#PasswordAuthentication yes

を書き換える。

PasswordAuthentication no

設定を反映させる。

sudo systemctl restart ssh

TeraTermでパスワードログインして確認、一度弾かれた後に”認証方式”が秘密鍵に切り替わって、ブレインパスワードがグレーアウトして選択できなくなったので無効化されていることが判る。

 

 

操作側を複数端末登録する場合

RaspberryPiを他の端末でもssh接続で使えるように、いくつでも追加は可能だがRaspberryPi側の設定を鍵のみに設定後は手順が異なる。

 

パスワード認証を禁止した後に、別のPC(PC B)からもアクセスしたくなった場合。


方法1:既にログインできるPC(PC A)から追記する(推奨)

既に鍵が登録されている PC A から、サーバーの authorized_keys を編集します。

    PC B で鍵を作成し、公開鍵(.pub)の中身をコピーする。

    PC A からサーバーに SSH ログインする。

    サーバー上でファイルを編集し、末尾に PC B の公開鍵(公開鍵.pubの内容)を貼り付けて保存する。

    nano ~/.ssh/authorized_keys

 

方法2:一時的にパスワード認証を許可する

    PC A からサーバーの設定(sshd_config)を一時的に PasswordAuthentication yes に戻す。

    sudo systemctl restart ssh で反映。

    PC B から 上記のコピー操作(2:公開鍵を渡す)を実行する(パスワードで書き込み)。

    終わったら再び no に戻してロックする。

 

~/.ssh/authorized_keysを見れば、複数端末の登録状況を確認できる。

中身は平文なので、必要ならコピーして現状メモとしてどこかで管理しても良い。

 

方法1の方が簡単、どうしても出来ない状況なら方法2で実施かな(・・?

1台目から、方法1で追加できるなら一番手っ取り早いかも?Kona Linux Pi 4.0(trixie)再セットアップ時に確認してみたいφ(..)メモメモ