sshで接続するまで時間がかかる場合に怪しむところ

最終更新日

ある日、新しいパソコンを購入したのでどこでもわくわく開発環境(VS code + Remote Developmentとか)を作っていたところ、sshの接続に時間がかかってVS codeのRemote Developmentがいい感じのタイミングで接続タイムアウトしちゃってうまく動かないので解決した顛末を記します。

現象

ssh hoge@example.com

対象のサーバーにssh接続しようとすると、ssh-keyのpassphraseの入力までに20秒くらい時間がかかる。そして、passphraseを入れれば接続自体は可能。

VS codeのRemote Developmentでサーバにsshで突入する際、この20秒の接続遅延がいいタイミングでVS codeのRemote Developmentの接続タイムアウトと重なってしまって用を為さない。

解決

sshのタイムアウトはいろんな要素があるようです。

ssh -vvv hoge@example.com

-vvv 付きでsshをぶっ放すとsshの接続ログが出力されるので、その中で怪しいやつを解決していくのがよかろうと思います。

「ssh 接続 遅い」とかでG先生を呼ぶと

https://programwiz.org/2021/11/15/ssh-slower-then-check/

ここいらあたりがヒットしますが、今回の私の現象とは違うようでした。
ちなみに上記URLのはは「sshさんがいくつかの認証を試して最後の方の認証がヒットするから時間がかかる」という現象の解決方法です。

私の場合は-vvvで出てくるログを読むと、IPv6のホスト名の解決ができなくてタイムアウト後にIPv4でホストに接続している、というプロセスで時間がかかっているみたいなので、sshのconfigで直接IPv4のアドレスを書いちゃう、というあんまり根本原因の解決になってない方法で解決しました。

本当はIPv6の名前解決できるようにするのがいいと思うんですけどね。まあいいや。IPv6あんまり詳しくないし。

ということで、sshのconfigを以下のように書き換え。

Host targethost.example.com
  HostName targethost.example.com
  User ubuntu

↑こうなっておるのを
↓こうやって書き換え。

Host targethost.example.com
  HostName 203.0.113.240
  User ubuntu

これで気持ちよくRemote Developmentできるようになりました。

IPv6の名前解決ができないのは何でや、という気持ち悪さは残りました。

以上、よろしくお願いいたします。