はじめに (対象読者・この記事でわかること)
この記事は、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.pem や secret.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
保存後、念のためパーミッションを確認。
Powershellicacls %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 オプションでデバッグ出力を確認し、どの鍵ファイルがトライされているか追跡しましょう。
Powershellssh -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、複数ホストのエイリアス等)についても紹介していきます。
参考資料
