У меня возникли проблемы при подключении к локальной виртуальной машине 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
на сервере, к которому вы подключаетесь. Кроме этого:
Если вы подключаетесь туда с хоста VM, я бы ожидал
ssh localhost
подключения к хосту, а не к гостевой VM. Если только у вас нет какой-то интересной сетевой настройки, конечно.для первой задержки вы можете запустить его
strace
и проверить, в каком системном вызовеssh
находится клиент.для второй задержки запустите
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
), который попытается собрать больше энтропии, или убедившись, что вашей виртуальной машине назначено правильное устройство энтропии, которое зависит от вашего решения виртуализации.