はじめに
この記事では、WindowsからLinuxサーバーへ「公開鍵認証」でSSHログインする手順を標準化するために記事を起こしました。
パスワードを使わず、安全で高速に接続できる設定手順です。
個人用途など小規模であれば、クライアントで1つのキーを生成し、複数のサーバーで使いまわしてもいいですが、セキュリティ向上のために複数サーバー(ServerA/ServerB)に対応しており、サーバーごとに異なる秘密鍵を使い分ける構成も紹介します。
対象環境
項目 | 内容 |
---|---|
クライアント | Windows 10 / 11(PowerShell使用) |
サーバー | Windows(SSH) Linux(Ubuntu, Debian, CentOSなど) |
目的 | パスワード認証を使わず安全なSSH接続を行う |
対象例 | ServerA(192.168.0.10) ServerB(192.168.0.11) |
1. OpenSSHクライアントの確認とインストール(Windows)
まず、Windows側にOpenSSHクライアントが入っているか確認します。
- PowerShellを管理者権限で起動
(スタートメニュー → 「PowerShell」を右クリック → 「管理者として実行」) - OpenSSHの状態を確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
- 未インストールの場合、以下で導入
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
- バージョン確認
ssh -V
例:OpenSSH_for_Windows_9.2p1, LibreSSL 3.6.1
2. サーバーごとにSSH鍵を作成する
PowerShellで以下を実行し、ServerA用・ServerB用の鍵をそれぞれ作ります。
ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\serverA_key -C "serverA用"
ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\serverB_key -C "serverB用"
-t ed25519
:高セキュリティで高速な鍵方式-f
:ファイル名指定-C
:コメント(識別用)
生成されるファイル
C:\Users\<ユーザー名>\.ssh\
├ serverA_key ← ServerA用 秘密鍵
├ serverA_key.pub ← ServerA用 公開鍵
├ serverB_key ← ServerB用 秘密鍵
├ serverB_key.pub ← ServerB用 公開鍵
3. Linuxサーバーに公開鍵を登録する
ServerAへの登録手順
- パスワードでログイン
ssh [email protected]
- .sshディレクトリを作成し、権限を設定
mkdir -p ~/.ssh chmod 700 ~/.ssh
- Windows側で公開鍵の内容を確認
type $env:USERPROFILE\.ssh\serverA_key.pub
- Linux側でauthorized_keysに追加
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... ServerA用" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ServerBへの登録手順
- パスワードでログイン
ssh [email protected]
- .sshディレクトリを作成し、権限を設定
mkdir -p ~/.ssh chmod 700 ~/.ssh
- Windows側で公開鍵の内容を確認
type $env:USERPROFILE\.ssh\serverB_key.pub
- Linux側でauthorized_keysに追加
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... ServerB用" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4. Linux側のSSHサーバー設定確認
どちらのサーバーでも次を確認します。
sudo nano /etc/ssh/sshd_config
次の設定項目を確認または修正します。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
設定後、SSHサービスを再起動します。
sudo systemctl restart ssh
5. Windows側でサーバーごとの設定を作成する
以下のファイルを作成または編集します。
C:\Users\<ユーザー名>\.ssh\config
Host serverA
HostName 192.168.0.10
User ubuntu
IdentityFile ~/.ssh/serverA_key
Host serverB
HostName 192.168.0.11
User ubuntu
IdentityFile ~/.ssh/serverB_key
Host
はショートネーム(任意)IdentityFile
で使用する秘密鍵を指定します
6. 接続テスト
PowerShellで以下を実行します。
ssh serverA
ssh serverB
パスワードなしでログインできれば成功です。
7. 鍵と設定の確認方法
鍵一覧を表示
Windows
Get-ChildItem $env:USERPROFILE\.ssh
Linux
ls ~/.ssh
公開鍵のfingerprintを確認
ssh-keygen -lf ~/.ssh/serverA_key.pub
ssh-keygen -lf ~/.ssh/serverB_key.pub
SSHエージェントに登録された鍵を確認
ssh-add -l
未登録の場合は以下で登録します。
ssh-add ~/.ssh/serverA_key
ssh-add ~/.ssh/serverB_key
8. トラブルシューティング
症状 | 原因・対処法 |
---|---|
Permission denied (publickey) | authorized_keys の権限を 600 に修正 |
Connection refused | SSHサービスが停止中 → sudo systemctl status ssh で確認 |
公開鍵が無視される | 改行や空白が混入していないか確認 |
configが無視される | ファイル名が「config」(拡張子なし)であるか確認 |
9. 運用とセキュリティのポイント
ポイント | 推奨内容 |
---|---|
鍵の種類 | ed25519(短く安全) |
サーバーごと | 鍵を分けておくとリスク分散できる |
ファイル権限 | .ssh は 700、authorized_keys は 600 |
バックアップ | .ssh フォルダ全体を暗号化して保存 |
パスワード認証 | 動作確認後に PasswordAuthentication no に変更 |
GitHubやVPS | 同様の手順で登録可能 |
10. 最終チェックリスト
- .ssh/config のバックアップを取った
- ServerA/ServerB用に鍵を作成した
- authorized_keys の権限が 600
- PubkeyAuthentication yes が有効
- ssh serverA/ssh serverB で接続確認済み
- 不要な鍵を削除済み
まとめ
ステップ | 内容 |
---|---|
1 | WindowsでOpenSSHを確認・インストール |
2 | サーバーごとにed25519鍵を作成 |
3 | 各サーバーに公開鍵を登録 |
4 | sshd_configで公開鍵認証を有効化 |
5 | Windowsのconfigで鍵を使い分け設定 |
6 | ssh serverA/ssh serverBで接続確認 |
7 | 鍵とfingerprintを確認 |
8 | セキュリティ最適化とバックアップ |
おわりに
これで、Windowsから複数のLinuxサーバーにパスワードなしで安全にSSH接続できる環境が整いました。
以降は「ssh serverA」などの短いコマンドだけで即ログインできます。
一度設定してしまえば、再度セットアップする頃にはすっかり手順を忘れてしまっている事が多く、都度やり方を調べてsshキーの運用がバラバラになっていたため、この記事の手順で運用してみたいと思います。
コメント