Ошибка проверки ключа хоста ssh только на одном из клиентов

Я не могу использовать ssh с клиента «A» на сервер «B» (но могу со многих других ssh-клиентов в той же подсети, что и «A» - все это машины * nux)

serverA> ssh -v -p ПОРТ пользователь @ serverB

OpenSSH_5.3p1 Debian-3ubuntu5, OpenSSL 0.9.8k 25 Mar 2009  
debug1: Reading configuration data /etc/ssh/ssh_config  
debug1: Applying options for *  
debug1: Connecting to serverB [serverB] port PORT.  
debug1: Connection established.  
debug1: identity file /home/user_A/.ssh/id_rsa type -1  
debug1: identity file /home/user_A/.ssh/id_dsa type 2  
debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024  
debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024  
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5  
debug1: match: OpenSSH_5.1p1 Debian-5 pat OpenSSH*  
debug1: Enabling compatibility mode for protocol 2.0  
debug1: Local version string SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5  
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: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent  
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP  
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent  
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY  
debug1: checking without port identifier  
Host key verification failed.  

Я уже проверил эти следующие точки на клиенте A - поскольку сервер A выглядит точкой -:

  • Права доступа к каталогу user_A / .ssh: 700 (см. man ssh)
  • права доступа user_A / .ssh / known_hosts: 644 (см. man ssh)
  • user_A / .ssh / known_hosts: НЕ размещает открытый ключ содержимого serverB
  • otherusers / .ssh / known_hosts: НЕ размещает открытый ключ содержимого serverB

Я пробовал :

  • удаление known_hosts на сервере A: остается та же ошибка
  • очистить known_hosts на сервере A: та же ошибка
  • проверка соответствия имен ключей хоста конфигурации ssh-сервера: ok (HostKey / etc / ssh / ssh_host_rsa_key)
  • регенерация ключей хоста сервера B (ssh-keygen -t dsa / rsa -f / etc / ssh / ssh_host_dsa / rsa_key): та же ошибка
  • ssh -p PORT me @ localhost на serverB: он также работает так же, как и от других клиентов ssh

Так что я действительно нахожусь в сложном состоянии! Специалисты по ssh добро пожаловать домой.

Спасибо заранее


person hornetbzz    schedule 19.02.2011    source источник


Ответы (3)


Не понимаю, что именно я сделал не так для этого конкретного сервера .. Что остается "странным", так это то, что уничтожение "known_hosts" на стороне клиента не дало ожидаемого положительного эффекта.

В любом случае, пожалуйста, найдите в дальнейшем то, что я делал вручную, довольно некрасиво, но работает:
Примечание. Это предполагает полный доступ к обоим машинам (клиенту и серверу)

на стороне сервера: повторно сгенерируйте 2 пары ключей (rsa и dsa).

ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

на стороне клиента:
сгенерируйте пару ключей dsa (частный и открытый) для пользователя "foo"

ssh-keygen -t dsa -f /home/foo/.ssh/my_client_key  

добавьте этот новый ключ в ssh-agent, если он запущен

ssh-add /home/foo/.ssh/my_client_key  

добавить содержимое сервера ssh_host_rsa_key.pub в клиент /home/foo/.ssh/known_hosts после IP / порта:

[server_ip]:server_port copy/paste here the server public rsa key (ctrl+shift+C/V)  
[server_ip]:server_port copy/paste here the server public dsa key (ctrl+shift+C/V)

теперь вернемся к стороне сервера:

скопируйте / вставьте открытый ключ клиента /home/foo/.ssh/my_client_key.pub в /home/bar/.ssh/.authorized_keys, чтобы разрешить подключение пользователю «foo» для подключения к учетной записи «bar»:

убедитесь, что путь согласован с / etc / ssh / sshd_config, чтобы иметь возможность использовать файл .authorized_keys:

AuthorizedKeysFile      %h/.ssh/.authorized_keys  

перезапустите ssh-сервер

/etc/init.d/ssh restart  

client: теперь клиент "foo" может подключаться по ssh к пользователю "bar" на сервере:

foo@client>$ ssh -p PORT bar@server_ip  

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

РЕДАКТИРОВАТЬ: если внимательнее прочитать страницы man ssh, можно будет обойти это наиболее правильным образом, см. man: «Параметр StrictHostKeyChecking может использоваться для управления входом в систему на машинах. чей ключ хоста неизвестен или был изменен ".

person hornetbzz    schedule 20.02.2011

У меня была та же проблема со встроенной системой, которую я не контролирую. Я думаю, что я исправил это, установив все открытые ключи с обеих сторон вручную.

Проблема началась с того, что ssh пожаловался на то, что «ssh-askpass» не найден. Чтобы решить эту проблему, нужно было отключить переменную окружения $ DISPLAY (да, совершенно очевидно). Я где-то читал, что OpenSSH попытается использовать ssh-askpass, если установлен DISPLAY. Так я сделал это

unset DISPLAY

Тогда я в основном получил сообщение об ошибке в OP. Итак, продолжая, я сделал все на этой странице, чтобы создать и скопировать открытый ключ из A в B.

http://knol.google.com/k/how-to-use-ssh-keygen# 

Я создал и ключ RSA, и ключ DSA. Я предполагаю, что RSA старше, а DSA новее. (Похоже, он использовал ключ RSA.) В любом случае, это не решило проблему само по себе.

Затем я попытался скопировать открытый ключ сервера «B» обратно на известные_хосты клиента «A». И это сработало!

С сервера B возьмите

/etc/ssh/ssh_host_rsa_key.pub

Затем добавьте его содержимое в

~/.ssh/known_hosts

на клиенте «A» с добавлением IP-адреса сервера «B» в начало (и один пробел)

192.168.0.200 ssh-rsa QbJfEdeu4rsgeAAAAAB3Nza.... etc ... ==

Полезный совет по отладке - использовать параметр -vvv для ssh, чтобы получить очень подробный вывод.

person Mark Lakata    schedule 12.04.2012

Для справки в будущем я исправил ту же проблему, выполнив (от клиента)

$ ssh-keyscan [HOST-SERVER-IP]
# [HOST-SERVER-IP] SSH-2.0-OpenSSH_6.7
[HOST-SERVER-IP] ssh-rsa AAAAB3NzaC1yc2EAAAADA ... etc ... +Zl
# [HOST-SERVER-IP] SSH-2.0-OpenSSH_6.7
[HOST-SERVER-IP] ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI ... etc ... +1w=

Затем я удалил все в ~/.ssh/known_hosts и скопировал, вставил два ключа точно так, как они выглядели в ~/.ssh/known_hosts.


Я на самом деле копирую и вставляю ssh-rsa только сначала, потому что я думал, что это то, что я использую. По какой-то причине это не сработало, когда я скопировал и вставил второй ключ, он работал как шарм. Также следует отметить, что я включил PasswordAuthentication в моей конфигурации sshd на сервере, чтобы не беспокоиться о ключах.

person Boris    schedule 09.12.2014