はじめに (対象読者・この記事でわかること)

この記事は、Windows 10/11 を使ってお名前.comでレンタルしたVPSにSSH接続したいが、「毎回ssh -i ~と秘密鍵のパスを指定するのが面倒」「複数のVPSを使い分けたいのにホスト名と鍵が連想されない」という方を対象にしてい。

読むことで、Windows標準のOpenSSHクライアントに「ホスト名と秘密鍵を自動で紐付ける」設定を施し、ssh myvpsだけで正しい鍵で接続できるようになります。WSLを使わず、PowerShellまたはコマンドプロンプトで完結します。

前提知識

  • Windows 10/11 でPowerShellまたはコマンドプロンプトが使えること
  • お名前.com VPSに対して公開鍵認証でログインできる秘密鍵(.pemまたは.ppk以外のOpenSSH形式)を既に持っていること
  • sshコマンドがC:\Windows\System32\OpenSSH\ssh.exeから実行できること(Windows 10 April 2018 Update以降)

WindowsのOpenSSHはデフォルトでホストと鍵を自動連携しない

Windows に標準で入っている OpenSSH クライクライアント(ssh.exe)は、Linux/macOS のように ~/.ssh/config を見に行きますが、Windows の場合「%USERPROFILE%\.ssh\config」が該当ファイルです。しかしこのファイルが存在しない・または書式が間違っていると、「ホスト名と秘密鍵を自動で対応付ける」ことができません。結果、毎回 -i オプションで鍵を指定するか、 ssh-agent に読み込ませておく必要が出てきます。本記事では、「config ファイルを正しく書くだけで、お名前.com VPS へ自動的に正しい鍵を使い分ける方法」 を詳解します。

configファイルでホスト別に鍵を紐付ける具体的手順

ステップ1:秘密鍵をOpenSSH形式で.sshディレクトリに配置する

お名前.com のコントロールパネルからダウンロードした秘密鍵が putty.pemsecret.ppk だった場合、まず OpenSSH 形式に変換します。

Powershell
# PuTTYgenで変換済みの場合はスキップ # 変換が必要な場合 ssh-keygen -i -f putty.pem > %USERPROFILE%\.ssh\onamae_vps_key

ファイル名は何でも構いませんが、.sshディレクトリに置き、パーミッションを厳しくしておきます。

Powershell
# PowerShell で実行 icacls %USERPROFILE%\.ssh\onamae_vps_key /inheritance:r /grant:r "%USERNAME":"(R)"

ステップ2:configファイルを作成しホストと秘密鍵を対応付ける

%USERPROFILE%\.ssh\config をエディタで新規作成し、以下のように記述します。

Text
# お名前.com VPS 用 Host myvps HostName 203.0.113.25 # ご自身のグローバルIP User root # または作成した一般ユーザー IdentityFile ~/.ssh/onamae_vps_key IdentitiesOnly yes # 他の鍵を使わない Port 22 # 変更済みならその番号 # 別のVPSがあれば追記 Host myvps2 HostName 198.51.100.10 User kou IdentityFile ~/.ssh/onamae_vps2_ed25519 IdentitiesOnly yes

保存後、念のためパーミッションを確認。

Powershell
icacls %USERPROFILE%\.ssh\config # 出力に %USERNAME% しか表示されなければOK

これで ssh myvps と打つだけで、正しい秘密鍵が自動的に使われるようになります。

ハマった点やエラー解決

エラー1:Permission denied (publickey)

  • 原因1: 秘密鍵のパーミッションが 600 ではない
  • 原因2: config に IdentitiesOnly yes を書き忘れ、ssh-agent が別の鍵を優先してしまう
  • 原因3: 変換後の公開鍵がVPS側の ~/.ssh/authorized_keys に登録されていない

エラー2:Bad owner or permissions on ~/.ssh/config

Windows は WSL ほど厳しくないものの、他のユーザーに読み取り権限が渡っていると怒られます。icacls で自分のみに絞り込んでください。

エラー3:既に Pageant(PuTTY Agent)が立ち上がっていて鍵が競合

PuTTY 系ツールを併用している場合、Pageant に鍵が登録されているとそちらが優先され、config の指定が無視されることがあります。Pageant から該当鍵を削除するか、環境変数 GIT_SSH_COMMAND などで強制的に OpenSSH 側を使うよう調整します。

解決策

上記の通り、秘密鍵・config ファイルともに「自分のみ読み取り」権限にし、config に IdentitiesOnly yes を明記することで 99% 解決します。それでもダメな場合は、-vvv オプションでデバッグ出力を確認し、どの鍵ファイルがトライされているか追跡しましょう。

Powershell
ssh -vvv myvps

まとめ

本記事では、Windows 標準の OpenSSH クライアントで「お名前.com VPS のホスト名と秘密鍵を自動連携する」方法を解説しました。

  • %USERPROFILE%\.ssh\config を作成し、Host 別に IdentityFile を指定する
  • 秘密鍵・config ともにパーミッションを厳しくし、かつ IdentitiesOnly yes を忘れない
  • PuTTY 形式の鍵は ssh-keygen -i で変換しておく

この記事を通して、煩雑だった ssh -i ~ を毎回打つ作業から解放され、シンプルに ssh myvps だけで接続できる環境が整います。今後は、Windows でも SSH 接続がサクサクできるよう、config ファイルを活用した高度な使い分け(ProxyJump、複数ホストのエイリアス等)についても紹介していきます。

参考資料