Когда я выполняю:
ssh-keyscan -H 172.22.56.2
я получаю следующий вывод:
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
Если я затем попытаюсь:
ssh-keyscan -H 172.22.56.2 >> ~/.ssh/known_hosts
Не зная ssh-keyscan, но веря в вывод, который я получил be .. не то, что я искал, я также пробовал варианты -t, например:
ssh-keyscan -H -t rsa 172.22.56.2 >> ~/.ssh/known_hosts
Все результаты одинаковы. Права доступа к файлу:
-rw-r--r-- 1 username username 886
«Имя пользователя» — это то, что запускает приведенные выше команды.Это оставляет меня со следующими вопросами:
Заранее спасибо за любую информацию!
ОБНОВЛЕНИЕ 1:
user@hostname:~$ ssh user@172.22.56.2
Unable to negotiate with 172.22.56.2 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
user@hostname:~$ ssh user@172.22.56.2 -oKexAlgorithms=+diffie-hellman-group1-sha1
Unable to negotiate with 172.22.56.2 port 22: no matching host key type found. Their offer: ssh-dss
user@hostname:~$ ssh user@172.22.56.2 -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss
Unable to negotiate with 172.22.56.2 port 22: no matching cipher found. Their offer: 3des-cbc
user@hostname:~$ ssh user@172.22.56.2 -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss -oCiphers=+3des-cbc
The authenticity of host '172.22.56.2 (172.22.56.2)' can't be established.
DSA key fingerprint is SHA256:HwdMfb3k5KwrwQkFIRe6ZXilbObYhNzLbwb0zvk2n8U.
Are you sure you want to continue connecting (yes/no/[fingerprint])? ^C
user@hostname:~$ ssh-keyscan -H 172.22.56.2
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
Добавление '-vv' относится только к приложению ssh, а не к ssh-keyscan, поэтому я не нашел в этом ничего полезного.
Технически, на первоначально поставленные вопросы были даны ответы, но это больше связано с отсутствием у меня полноты видения вопроса — кажется, на данный момент настоящий вопрос таков:
Должен ли я открыть новый вопрос или просто изменить исходную заявку? Спасибо!
(Из комментариев плюс обновление)
Проблема в том, что целевое устройство действительно хромает и, по-видимому, (, как диагностировано ssh
), поддерживает только старые и в основном устаревшие параметры SSH, которые не нравятся последнему OpenSSH.
Во-первых, он имеет только DSA (, также пишется как DSS в ключе SSH). ssh-keyscan
по умолчанию никогда не запрашивал ключ DSA, хотя набор типов, которые он запрашивал, варьировался и в основном включал другие новые типы, которые были добавлены; вот почему его запуск без опций показывает 5 попыток--получить типы ключей, которых нет у устройства. Эту часть можно исправить, указав -t dsa
.
Во-вторых, он поддерживает только группу DH 1 для KEX и 3des-cbc для шифрования. Хотя ssh
больше не считает группу 1 безопасной и для ее использования требуется опция -oKexAlgorithms=
, ssh-keyscan
заставляет то, что выглядит как , все группы KEX. Тем не менее, это не изменяет ssh
по умолчанию для шифров, поэтому ssh-keyscan
в OpenSSH 7.4 по-прежнему должен давать сбой. Если вы понизите версию ниже 7.4, я думаю, что ssh-keyscan -t dsa
будет работать. Конечно, переход на более раннюю версию вреден для безопасности, поэтому вы должны делать это только на пустой обезьяне, такой как виртуальная машина или контейнер, который затем отбрасывается.
В качестве альтернативы, как вы обнаружили,ssh
можно дать -o
опции для принятия этих старых опций, чтобы он мог получить ключ хоста и добавить его в known_hosts
. Если вы хотите просто избежать взаимодействия, т. е. автоматизировать, используйте-oStrictHostKeyChecking=no
(или accept-new
в 7.6 up), чтобы сделать это без запроса. Если вы не хотите, чтобы новый ключ помещался непосредственно в файл, также используйте -oUserKnownHostsFile=
, чтобы поместить его в другое место --, хотя, как только вы это сделаете, на самом деле единственное, что можно сделать с новым файлом, это добавить это к known_hosts
точно так же, как ssh
, так зачем беспокоиться?