WindowsからLinuxへSSH公開鍵認証でログインする方法(ServerA/ServerB対応)



はじめに

この記事では、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クライアントが入っているか確認します。

  1. PowerShellを管理者権限で起動
    (スタートメニュー → 「PowerShell」を右クリック → 「管理者として実行」)
  2. OpenSSHの状態を確認 Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
  3. 未インストールの場合、以下で導入 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  4. バージョン確認 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への登録手順

  1. パスワードでログイン

    ssh [email protected]
  2. .sshディレクトリを作成し、権限を設定

    mkdir -p ~/.ssh chmod 700 ~/.ssh
  3. Windows側で公開鍵の内容を確認

    type $env:USERPROFILE\.ssh\serverA_key.pub
  4. Linux側でauthorized_keysに追加

    echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... ServerA用" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

ServerBへの登録手順

  1. パスワードでログイン

    ssh [email protected]
  2. .sshディレクトリを作成し、権限を設定

    mkdir -p ~/.ssh chmod 700 ~/.ssh
  3. Windows側で公開鍵の内容を確認

    type $env:USERPROFILE\.ssh\serverB_key.pub
  4. 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 refusedSSHサービスが停止中 → 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 で接続確認済み
  • 不要な鍵を削除済み

まとめ

ステップ内容
1WindowsでOpenSSHを確認・インストール
2サーバーごとにed25519鍵を作成
3各サーバーに公開鍵を登録
4sshd_configで公開鍵認証を有効化
5Windowsのconfigで鍵を使い分け設定
6ssh serverA/ssh serverBで接続確認
7鍵とfingerprintを確認
8セキュリティ最適化とバックアップ

おわりに

これで、Windowsから複数のLinuxサーバーにパスワードなしで安全にSSH接続できる環境が整いました。
以降は「ssh serverA」などの短いコマンドだけで即ログインできます。

一度設定してしまえば、再度セットアップする頃にはすっかり手順を忘れてしまっている事が多く、都度やり方を調べてsshキーの運用がバラバラになっていたため、この記事の手順で運用してみたいと思います。

コメント

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