Сбой проверки ключа хоста ssh только на одном из клиентов - PullRequest
1 голос
/ 19 февраля 2011

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

serverA> ssh -v -p ПОРТ user @ 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

Я пробовал:

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

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

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

Ответы [ 3 ]

2 голосов
/ 20 февраля 2011

Не понимаю, что именно я сделал не так для этого конкретного сервера ... Что остается "странным", так это то, что уничтожение "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 (private и public) для пользователя "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 для пользовательской "панели" на сервере:

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

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

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

0 голосов
/ 10 декабря 2014

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

$ 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 на сервере, чтобы не беспокоиться о ключах.

0 голосов
/ 12 апреля 2012

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

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

unset DISPLAY

Тогда я в основном получил сообщение об ошибке в ОП. Итак, продолжая, я сделал все на этой странице, чтобы создать и скопировать открытый ключ из 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, чтобы получить супер подробный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...