Установка SSH-соединения слишком медленная

Установка SSH-соединения слишком медленная

У меня возникли проблемы при подключении к локальной виртуальной машине Centos 6.3 с 500 МБ оперативной памяти.

Ниже представлен результат 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. Если вы подключаетесь туда с хоста VM, я бы ожидал ssh localhostподключения к хосту, а не к гостевой VM. Если только у вас нет какой-то интересной сетевой настройки, конечно.

  2. для первой задержки вы можете запустить его straceи проверить, в каком системном вызове sshнаходится клиент.

  3. для второй задержки запустите topв виртуальной машине, чтобы увидеть, что там происходит, пока вы к ней подключаетесь. В то же время я предлагаю запустить демон SSH в режиме отладки на альтернативном порту и подключиться к этому экземпляру - вы увидите, где он ждет - просто запустите (как root):

    sshd -ddd -p 2222 -o UsePrivilegeSeparation=no
    

    это запустит демон SSH на порту 2222, запишет много информации ( -ddd) и не будет использовать разделение привилегий во время входа в систему (отключение разделения привилегий упростит просмотр того, что происходит в strace, поскольку будет использоваться только один процесс). Вы также можете добавить -o UseDNS=noотключение опции, упомянутой выше.

решение2

Если это виртуальная машина, то причиной может быть недостаточная энтропия.Используйте эту строку для мониторинга доступной энтропии до/во время попытки подключения:

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

Если он уже довольно низкий или значительно снижается во время попытки подключения, то, скорее всего, он и является причиной.

РЕДАКТИРОВАТЬ:Это влияет на доступную энтропию, поскольку запуск новых процессов потребляет энтропию. Смотрите такжеhttps://blog.flameeyes.eu/2011/03/entropy-broken

Вы можете увеличить доступную энтропию, установив демон ( rng-toolsили clrngd), который попытается собрать больше энтропии, или убедившись, что вашей виртуальной машине назначено правильное устройство энтропии, которое зависит от вашего решения виртуализации.

Связанный контент