web-dev-qa-db-ja.com

SSH接続タイムアウトを設定する

Sshがホストへの接続を開こうとしている時間を短縮しようとしています。たとえば、ssh www.google.comと入力すると、プロンプトが表示されるまで非常に時間がかかります。

代わりにssh -o ConnectTimeout=10 www.google.comの使用について読みましたが、これでも非常に時間がかかります。ブロッキング時間を短縮するために変更できる試行回数はありますか?

36
multiholle

問題は、sshがallwww.google.comに解決されます。たとえば、私のマシンでは:

# ssh -v -o ConnectTimeout=1 -o ConnectionAttempts=1 www.google.com
OpenSSH_5.9p1, OpenSSL 0.9.8t 18 Jan 2012
debug1: Connecting to www.google.com [173.194.43.20] port 22.
debug1: connect to address 173.194.43.20 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.19] port 22.
debug1: connect to address 173.194.43.19 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.18] port 22.
debug1: connect to address 173.194.43.18 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.17] port 22.
debug1: connect to address 173.194.43.17 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.16] port 22.
debug1: connect to address 173.194.43.16 port 22: Connection timed out
ssh: connect to Host www.google.com port 22: Connection timed out

特定のIPで実行すると、はるかに高速に戻ります。

[〜#〜] edit [〜#〜]:(timeで)時間を計った結果、結果は次のとおりです。

  • www.google.com-5.086秒
  • 173.94.43.16-1.054秒
55
sinelaw

ConnectTimeoutオプションを使用すると、sshクライアントに、エラーを返す前に接続を待機する時間を指示できます。 ConnectTimeoutを1に設定すると、「最大1秒間試行してから、まだ接続していない場合は失敗します」ということになります。

問題は、名前で接続すると、DNSルックアップに数秒かかる場合があることです。 IPアドレスによる接続ははるかに高速で、実際には1秒以内に機能する場合があります。 sinelawが経験しているのは、DNS名で接続しようとするすべての試みが1秒以内に発生しないことです。 ConnectTimeoutのデフォルト設定は、Linuxカーネルの接続タイムアウトに従いますが、通常はかなり長いです。

4
John Calcote