Сегодня я понял очень странную вещь:
У меня в локальной сети есть сервер (работающий под управлением Ubuntu Server 12.04.4 LTS), порт SSH которого доступен через Интернет (я могу подключиться к нему с помощью ssh my.internet.ip.address
).
Однако только сегодня я понял, что не могу подключиться к нему по локальной сети ( ssh its.local.ip.address
без ошибок).
Я проверил /etc/hosts.deny
и добавил свой компьютер явно в /etc/hosts.allow
, но это ничего не изменило. Конечно, я также попробовал перезапустить ssh и весь сервер. Нет новых доступных обновлений.
Локальное соединение не удаётся:
myself@my-desktop ~ $ ssh -v its.local.ip.address
OpenSSH_6.2p2 Ubuntu-6ubuntu0.4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to its.local.ip.address [its.local.ip.address] port 22.
debug1: Connection established.
debug1: identity file /home/myself/.ssh/id_rsa type -1
debug1: identity file /home/myself/.ssh/id_rsa-cert type -1
debug1: identity file /home/myself/.ssh/id_dsa type -1
debug1: identity file /home/myself/.ssh/id_dsa-cert type -1
debug1: identity file /home/myself/.ssh/id_ecdsa type -1
debug1: identity file /home/myself/.ssh/id_ecdsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2p2 Ubuntu-6ubuntu0.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.4
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.4 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
Connection closed by its.local.ip.address
myself@my-desktop ~ $
Однако удаленное подключение работает:
myself@my-desktop ~ $ ssh -v my.internet.ip.address
OpenSSH_6.2p2 Ubuntu-6ubuntu0.4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to my.internet.ip.address [my.internet.ip.address] port 22.
debug1: Connection established.
debug1: identity file /home/myself/.ssh/id_rsa type -1
debug1: identity file /home/myself/.ssh/id_rsa-cert type -1
debug1: identity file /home/myself/.ssh/id_dsa type -1
debug1: identity file /home/myself/.ssh/id_dsa-cert type -1
debug1: identity file /home/myself/.ssh/id_ecdsa type -1
debug1: identity file /home/myself/.ssh/id_ecdsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2p2 Ubuntu-6ubuntu0.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.4
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.4 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA [... hidden here ...]
debug1: Host 'my.internet.ip.address' is known and matches the ECDSA host key.
debug1: Found key in /home/myself/.ssh/known_hosts:4
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: password
debug1: Next authentication method: password
[email protected]'s password:
[ ... everything works just fine ... ]
Что может быть причиной этой проблемы и, что еще важнее, как ее решить?
Примечание: Увеличение детализации ( ssh -vvv
) не приводит к отображению дополнительных данных в точке, где оба вывода расходятся.
решение1
Сервер решает разорвать соединение, поэтому вам придется отлаживать проблему со стороны сервера. Если у вас есть доступ "root" на сервере, вы можете запустить sshd
интерактивно:
/path/to/sshd -ddd -p 42
Это запустит копию sshd
прослушивания на порту 42 (вы можете указать другой номер) в режиме отладки. Она будет работать на переднем плане, принимая одно соединение и печатая отладочную информацию на вашем терминале.
Теперь свяжитесь со своим клиентом:
ssh -v -p 42 its.local.ip.address
Если повезет, отладочные сообщения на стороне сервера должны указать причину разрыва сеанса.
решение2
Я предполагаю, что клиентская машина в обоих случаях одна и та же (хотя запросы различаются). Поскольку она разрешает TCP-соединение, вероятно, это связано с политиками обратного DNS и/или запрета в конфигурации sshd.
Попробуйте отключить DNS на стороне сервера (UseDNS=no в sshd_config) и перезапустить sshd (kill -1 должно быть достаточно)
решение3
Сообщается, что эта ошибка затронула нескольких пользователей.
Если вы локальны, попробуйте ssh -X, чтобы отключить переадресацию x.
Кроме того, может потребоваться настроить максимальный размер передаваемого блока [MTU] в соответствии с MTU сервера ssh_server.
** если это не сработает локально, попробуйте:
myself@my-desktop ~ $ ssh -v my.internet.ip.address
Если он может выйти из вашей сети, то вернитесь обратно...
Это могут быть ошибки конфигурации сервера, проверьте sshd_config на предмет «разрешенных пользователей», а также место хранения known_host, добавьте версию local.ip.address пользователя «myself».
копия sshd может помочь