MacからAmazon LIghtsailへのSSH接続がタイムアウトする問題の原因と解決方法

1. 問題の発生

個人的につかっているAmazon Lightsailに、MacからSSH接続しようとしましたが、

❯ ssh lightsail
ssh: connect to host 203.0.113.72 port 22: Operation timed out

と、タイムアウトしてしまい接続できない問題が発生しました。

2. 問題解決のために実施した手順

まず、接続できない原因としてSSH鍵を疑ってみましたが、なんど作り直しても接続できません。 そもそも、サーバに疎通していないのかと思いましたが、pingを打てば通ることも確認したため、 接続に必要な情報は揃っているはずです。

さらに、同じネットワークにあるUbutuマシンからは、LightsailにSSH接続することができるため、 Mac側の問題の可能性が高くなっています。

また、サーバ側のログを見ようと思い、まず/etc/ssh/sshd_configLogLevelINFOからDEBUGに変更し、

# Logging
SyslogFacility AUTH
- LogLevel INFO
+ LogLevel DEBUG

また再度Mac側から接続を試みましたがタイムアウトしてしまい、/var/log/auth.logを確認したところ、ログインを試行している形跡がなかったので、 サーバー側で接続がブロックされているわけではない、と判断しました。

3. 解決策

上記でMac側の問題と判断したので、ssh-vvvオプションで、ログを見てみました。

❯ ssh -vvv ubuntu@203.0.113.72 -i ~/.ssh/lightsail
OpenSSH_9.0p1, LibreSSL 3.3.6
debug1: Reading configuration data /Users/username/.ssh/config
debug2: checking match for 'host leo user root' host 203.0.113.72 originally 203.0.113.72
debug3: /Users/username/.ssh/config line 27: not matched 'host "203.0.113.72"' 
debug3: /Users/username/.ssh/config line 27: not matched 'user "ubuntu"' 
debug2: match not found
debug2: checking match for 'host leo user terraform' host 203.0.113.72 originally 203.0.113.72
debug3: /Users/username/.ssh/config line 31: not matched 'host "203.0.113.72"' 
debug3: /Users/username/.ssh/config line 31: not matched 'user "ubuntu"' 
debug2: match not found
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: include /etc/ssh/ssh_config.d/* matched no files
debug1: /etc/ssh/ssh_config line 54: Applying options for *
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug2: resolve_canonicalize: hostname 203.0.113.72 is address
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/Users/username/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/Users/username/.ssh/known_hosts2'
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug3: ssh_connect_direct: entering
debug1: Connecting to 203.0.113.72 [203.0.113.72] port 22.
debug3: set_sock_tos: set socket 3 IP_TOS 0x48

一番下のメッセージで止まるため、このメッセージでググってみたところ、-o IPQoS=noneにすると解決するとのことだったので、

❯ ssh lightsail -o IPQoS=none

としたら、無事につながりました。

無事につながったので、最後にconfigファイルを編集し、以下のように追記します。

Host lightsail
+    IPQoS none

これで

❯ ssh lightsail

とするだけで、つながるようになりました。

5. まとめ

今回の問題は、MacからAmazon LIghtsailにSSH接続する際に、タイムアウトして接続できないというものでした。 解決策としては、Mac側からSSH接続する際に、IPQoSをオプションを無効化することで、接続が成功するようになりました。

SSH接続でうまくいかない場合は、ssh -vvvでログ確認してみるのは、良い方法だと学びました。 でも、IPQoSって何??

See Also