概要
これまで問題なく接続できていたWindows端末に対し、SSH経由で急に接続できなくなった。
エラーメッセージには Connection timed out
と表示され、原因の切り分けと対処が必要となった。
環境
-
クライアント:
- OS:Windows 11 HOME
- SSHバージョン:OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
- 接続コマンド例:
ssh -i [SSHkeyの場所] [ユーザー名]@[LANのIPアドレス] -vvv
-
接続先(サーバー):
- OS:Windows 11 HOME
- OpenSSH Server:Installed
- SSH サービス(sshd):自動起動設定済
- ネットワーク:同一セグメント(例:100.64.1.0/24)
症状
-
ping
は成功するが、ssh
はタイムアウトする -
Test-NetConnection
ではPingSucceeded: True
/TcpTestSucceeded: False
-
ssh -vvv
の詳細ログではconnect to address <IP> port 22: Connection timed out
対処方法(実施内容)
1. ファイアウォールの確認
Get-NetFirewallRule -Name sshd
→ Enabled: True
, Action: Allow
であることを確認
2. SSHサービスが起動しているか確認
Get-Service sshd
→ Running
であることを確認。未起動であれば以下で起動:
Start-Service sshd
3. ポート 22 がリッスンされているか確認
netstat -aon | findstr :22
→ LISTENING
状態でない場合は、sshd がポートを開いていない可能性あり。
4. sshd_config
を確認
notepad C:\ProgramData\ssh\sshd_config
→ #Port 22
の行がコメントアウトされていたため、以下のように修正:
Port 22
→ 保存後、SSHサービスを再起動:
Restart-Service sshd
原因
sshd_config
の Port 22
設定がコメントアウトされていたため、SSHサービスがポート22をリッスンしていなかった。
通常、OpenSSHはこの項目がコメントアウトされていてもデフォルトでポート22を使うが、何らかのタイミング(Windows Update、設定変更等)でポート設定が無視されるケースがある。今回もその一環と推定される。
補足
-
sshd
に関するイベントログはイベントビューアー → アプリケーションとサービスログ → OpenSSHから確認可能 -
sshd_config
ファイルのバックアップ(復旧のため) - Windowsアップデート履歴を確認(直前に大規模アップデートがあったか)
- 同様の事象が再発した際に備え、以下のコマンドでサービス状態とポートの確認スクリプトを作っておくと便利:
Get-Service sshd
netstat -aon | findstr :22
Test-NetConnection <接続先IP> -Port 22