技術資料

PowerShellでSSH接続先と秘密鍵を使い分ける:configの設定と確認方法

作成日:2026.10.08

WindowsのOpenSSHで、configに接続先ごとのホスト名・ユーザー名・秘密鍵を設定し、短い別名で接続する方法を紹介します。ssh -Gによる設定確認、ssh -vによる接続・認証の調べ方、複数鍵や共通設定の注意点も整理します。

PowerShellからSSH接続するとき、接続先ごとにユーザー名や秘密鍵を指定していると、コマンドが長くなりがちです。サーバーが増えると、「この接続先にはどの鍵を使うんだっけ」と確認する手間も出てきます。

そんなときは、OpenSSHのconfigに接続先ごとの設定をまとめておくと便利です。今回は、複数の接続先と秘密鍵を登録し、短い別名で接続する方法を整理します。

鍵ファイルの権限設定や、ssh -iによる基本接続は、PowerShellを使ったSSH接続の記事で扱っています。この記事では、すでに鍵認証で接続できる環境を前提に、接続先の使い分けと設定の確認に絞ります。

今回の確認環境

  • Windows(OSビルド:10.0.26200.0)
  • PowerShell 7.6.6
  • WindowsのOpenSSHクライアント:OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2
  • 使用した実行ファイル:C:\Windows\System32\OpenSSH\ssh.exe
  • 仕様・設定の確認日:2026年10月8日

掲載する設定の適用結果は、一時的な設定ファイルを-Fで指定し、ssh -Gで確認しています。実サーバーへの接続、秘密鍵の読み込みと認証、ssh-agentに複数の鍵がある状態での認証は未検証です。後半の接続確認は公式資料に基づく手順として紹介します。

Gitなどに同梱された別のssh.exeが使われる場合もあるので、まずはPowerShellで実行ファイルとバージョンを確認しておきます。

Get-Command ssh | Select-Object Source
ssh -V

configに接続先ごとの設定を書く

WindowsのOpenSSHクライアントでは、ユーザー用の設定ファイルを%USERPROFILE%\.ssh\configに置きます。例えば、ユーザーフォルダがC:\Users\sampleなら、C:\Users\sample\.ssh\configです。

PowerShellで保存先のパスを確認するなら、次のように書けます。

Join-Path $env:USERPROFILE '.ssh\config'

.sshフォルダがなければ作成し、その中に拡張子のないconfigという名前でファイルを保存します。config.txtになっていないか確認してください。既存のファイルがある場合はバックアップを取り、必要な設定だけを追加します。今回の設定確認では、UTF-8(BOMなし)・CRLFのファイルを使用しました。

これはSSHクライアントの設定です。サーバー側のsshd_configとは別のファイルになります。保存場所については、Microsoft公式のOpenSSH設定ファイルの説明で確認できます。

接続先はHostごとに分け、次の項目を設定します。

項目役割
Host設定を適用する接続先の名前。今回は接続用の別名を指定する
HostName実際に接続するホスト名またはIPアドレス
User接続先サーバーのログインユーザー名
Port接続先のSSHポート。省略時は22
IdentityFile認証に使う秘密鍵ファイルのパス
IdentitiesOnlyyesにすると、公開鍵認証で使う鍵を設定された候補に絞る

Hostの下に書いた設定は、次のHostなどの区切りまで、その接続先に適用されます。インデントは読みやすくするためのものです。各項目の意味は、OpenSSHのssh_configマニュアルにまとまっています。

2つの接続先で秘密鍵を使い分ける

開発用と本番用で、ユーザー名・ポート・秘密鍵が異なる例にしてみます。configへ次のように記述します。ホスト名、ユーザー名、鍵のパスは説明用なので、実際の接続先に合わせて置き換えてください。

Host demo-dev
    HostName dev.example.com
    User developer
    Port 22
    IdentityFile ~/.ssh/key_demo_dev
    IdentitiesOnly yes

Host demo-prod
    HostName prod.example.com
    User deploy
    Port 2222
    IdentityFile "C:/SSH Keys/key_demo_prod"
    IdentitiesOnly yes

~/.ssh/key_demo_devは、ホームディレクトリの.sshにある鍵を指定しています。絶対パスで指定する場合は、2つ目の例のようにC:/...と書けます。空白を含むパスは、全体をダブルクォートで囲みます。

IdentityFileには鍵の中身ではなく、既存の秘密鍵ファイルのパスを書きます。この設定だけで鍵が作成されたり、サーバーへ公開鍵が登録されたりするわけではありません。

設定後、開発用サーバーへ接続するコマンドは次のようになります。

ssh demo-dev

本番用サーバーなら、別名を変えるだけです。

ssh demo-prod

ここで使うのはHostに指定した名前です。ssh dev.example.comと実際のホスト名を直接指定しても、Host demo-devの設定には一致しません。

初回接続でサーバーのホスト鍵を確認する画面が出たら、管理者などから別途確認したフィンガープリントと照合してから受け入れます。自分の秘密鍵と、接続先が提示するホスト鍵は別のものです。

ssh -Gで適用される設定を確認する

接続する前に、別名からどの設定が選ばれるかを確認してみます。-Gは、設定を評価した結果を表示して終了するオプションです。

ssh -G demo-dev | Select-String '^(hostname|user|port|identityfile|identitiesonly) '

先ほどの設定だけを適用した場合、抜き出した項目は次のようになります。

user developer
hostname dev.example.com
port 22
identitiesonly yes
identityfile ~/.ssh/key_demo_dev

demo-prodでも同様に確認し、接続先・ユーザー名・ポート・鍵のパスが切り替わるかを見ます。

ssh -G demo-prod | Select-String '^(hostname|user|port|identityfile|identitiesonly) '

ただし、identityfileが表示されても、そのファイルが存在して読み込めることや、その鍵で認証できることまでは確認できません。ここでは、設定の選択が期待どおりかを見ています。

別の設定ファイルだけを使って確認したい場合は、-Fで指定できます。例えば、作業フォルダのsample-ssh-configに設定を保存したなら、次のように確認します。この指定では、通常のユーザー設定とシステム共通設定は読み込みません。

ssh -G -F .\sample-ssh-config demo-dev | Select-String '^(hostname|user|port|identityfile|identitiesonly) '

-Fで確認できても、通常のconfigの保存場所が正しいことを確認したわけではありません。実際に使う設定へ追加した後は、-Fなしでも確認してください。各オプションは、OpenSSHのsshコマンドマニュアルで確認できます。

ssh -vで接続と認証を確認する

設定が期待どおりなら、次は-vを付けて実際に接続します。このコマンドは設定の表示だけではなく、サーバーへの接続を行います。

ssh -v demo-dev

ログでは、次のような表示を手掛かりにします。文言や詳しさはバージョンや認証方式によって異なります。

  • Reading configuration data:どの設定ファイルを読み込んだか
  • Applying options for:どのHostの設定が適用されたか
  • Offering public key:どの鍵を認証候補として提示したか
  • Server accepts key:提示した鍵をサーバーが受け入れる応答を返したか
  • Authenticated to:認証が完了したか。併せて使われた認証方式も確認する

鍵を提示したログだけで成功と判断せず、最終的に認証が完了したことと、公開鍵認証が使われたことを確認します。パスワードでログインできた場合は、指定した鍵で成功したとは限りません。

ログを共有するときは、ユーザー名、接続先のホスト名やIP、鍵ファイルのパスなどを伏せてください。秘密鍵の中身やパスフレーズを貼り付ける必要はありません。

想定と違う鍵が使われるときの確認

ssh-agentが持つ鍵も候補になる

ssh-agentを使っている場合、IdentityFileに指定したもの以外に、agentが持つ鍵も認証候補になることがあります。接続先ごとに鍵を絞りたいので、今回の例ではIdentitiesOnly yesを付けています。

これはagent自体を無効にする設定ではありません。設定で選んだ鍵がagentにあれば、その鍵をagent経由で使うことはできます。また、パスワード認証を無効にする設定でもありません。

共通設定のIdentityFileは追加される

気を付けたいのは、IdentityFileが複数書かれている場合です。例えば、先ほどの設定の末尾へ次を追加したとします。

Host *
    IdentityFile ~/.ssh/key_common

Host *はすべての接続先に一致するので、demo-devにも適用されます。ssh -G demo-devでは、鍵の候補が次の2つになります。

identityfile ~/.ssh/key_demo_dev
identityfile ~/.ssh/key_common

IdentitiesOnly yesでも、設定された2つの候補を1つに減らすわけではありません。接続先固有のIdentityFileを書けば共通設定を置き換えられる、と考えないようにします。鍵を接続先ごとに分けるなら、共通のHost *へ鍵を置く必要があるかを見直します。

Userなどは先に得られた値が使われる

一方、UserやPortなどは、原則として先に得られた値が使われます。共通設定を先頭へ書くと、接続先固有の値が使われないことがあります。

Host *
    User common-user

Host demo-dev
    HostName dev.example.com
    User developer

この例では、demo-devのユーザー名もcommon-userになります。接続先固有の設定を先に、共通の初期値を末尾に書くと整理しやすいです。コマンドラインの-lや-pなどで指定した値は、設定ファイルより優先される点にも注意してください。

設定・通信・認証を順に切り分ける

ssh -Gの値が違う場合は、保存場所、ファイル名、接続に使った別名、共通設定を確認します。値が合っていても接続できない場合は、ssh -vで接続先とポートを確認し、名前解決や通信の段階で止まっているのか、鍵認証で拒否されているのかを分けて見ます。

認証で失敗する場合は、秘密鍵のパスと読み取り権限、接続先のユーザー名、そのユーザーに対応する公開鍵がサーバーへ登録されているかを確認します。configを整理しても、サーバー側の設定や鍵の権限の問題まで解決するわけではありません。

接続先ごとの設定が揃えば、普段はssh demo-devのように短いコマンドで接続できます。うまくいかないときは、まずssh -Gで選ばれた設定を確認し、次にssh -vで実際の接続と認証を追うと調べやすいかと思います。

参考資料

この記事を書いた人

※上が私です。

奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。

PowerShellを使ったSSH接続 ― Windows環境での鍵ファイル権限設定とSSHログイン

2025.04.08

PowerShellを使ったSSH接続は、Windowsユーザーにとってシームレスなリモート作業を実現する有力な手段です。この記事では、鍵ファイルの権限設定方法(icaclsを利用)と、実際のSSHログイン手順を具体例とともに解説します。

PowerShell SSH

VS Code版CodexのStopフックで応答終了をWindowsに通知する

2026.10.04

VS Code版CodexのStopフックとPowerShellを使い、最後の応答をWindows通知に表示する方法を紹介します。hooks.jsonの設定と非同期実行、日本語が文字化けした際のUTF-8による対処、通知が出ない場合の確認点をまとめます。

Codex PowerShell VS Code

Windows版Codexで「CreateProcessAsUserW failed: 5」が出たときのPowerShell確認と対処

2026.08.07

Windows 11のCodexで、Get-Contentなどの読み取りコマンド実行時に「CreateProcessAsUserW failed: 5」が発生した事例をもとに、エラー内のpwsh.exeのパスやwhere.exe pwsh、Get-Commandの結果を確認し、PowerShellの導入形態を見直して改善するまでの切り分け手順を紹介します。

Codex PowerShell

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP