SSH 接続の確立が遅すぎる

SSH 接続の確立が遅すぎる

500 MB の RAM を搭載したローカル Centos 6.3 VM に接続する際に問題が発生します。

ssh -vvv localhost以下は接続の出力です。

OpenSSH_6.3, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /usr/local/etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [127.0.0.1] port 22.
^^^^^^^^^^ Loading this statement takes more than a minute

debug1: Connection established.
...

debug1: Next authentication method: password 
root@localhost's password:
^^^^^^^^^^ This step takes a minute too

debug3: packet_send2: adding 64 (len 50 padlen 14 extra_pad 64)
debug2: we sent a password packet, wait for reply
debug1: Authentication succeeded (password).
Authenticated to localhost ([127.0.0.1]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: packet_set_tos: set IP_TOS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Wed Oct  9 13:27:02 2013 from 10.0.0.2

この遅延を解消する方法を教えてください。

答え1

私の推測では、問題は DNS 要求のタイムアウトです。ホスト名ではなく IP アドレスで接続し、UseDNS接続先のサーバーのオプションをオフにしてみてください。それ以外:

  1. ssh localhostVM ホストから接続していると仮定すると、ゲスト VM ではなくホストに接続することになります。もちろん、興味深いネットワーク設定がない限りは。

  2. 最初の遅延については、これを実行してstrace、クライアントがどのシステム コールsshでハングしているかを確認することをお勧めします。

  3. 2 回目の遅延については、topVM で実行して、接続中に何が起こっているかを確認します。同時に、別のポートで SSH デーモンをデバッグ モードで実行し、そのインスタンスに接続することをお勧めします。どこで待機しているかがわかります。次のコマンドを (root として) 実行するだけです。

    sshd -ddd -p 2222 -o UsePrivilegeSeparation=no
    

    これにより、ポート 2222 で SSH デーモンが起動し、大量の情報がログに記録され ( -ddd)、ログイン中に権限分離が使用されなくなります (権限分離を無効にすると、1 つのプロセスのみが使用されるため、strace で何が起こっているかを確認しやすくなります)。-o UseDNS=no上記のオプションを無効にするには、 を追加することもできます。

答え2

VM の場合は、エントロピー不足が原因である可能性があります。接続試行の前または接続試行中に利用可能なエントロピーを監視するには、次の行を使用します。

while true; do sleep 5; cat /proc/sys/kernel/random/entropy_avail; done

すでにかなり低い場合、または接続試行中に大幅に低下する場合は、それが原因である可能性が非常に高くなります。

編集:これを行うと、新しいプロセスを開始するとエントロピーが消費されるため、利用可能なエントロピー自体に影響します。https://blog.flameeyes.eu/2011/03/entropy-broken

利用可能なエントロピーを増やすには、より多くのエントロピーを収集しようとするデーモン (rng-toolsまたはclrngd) をインストールするか、仮想化ソリューションに応じて VM に適切なエントロピー デバイスが割り当てられていることを確認します。

関連情報