ssh-keyscan - все еще поддерживается с помощью Не удается установить подлинность хоста «[имя хоста] ([IP-адрес])»

Я пишу сценарий для удаленной установки rsync, и мне нужно добавить удаленный сервер в локальный файл known_hosts, чтобы при первом запуске сценария избегайте следующих подсказок:

Подлинность хоста «[имя хоста] ([IP-адрес])» не может быть установлена. Отпечаток ключа RSA - [отпечаток ключа] . Вы уверены, что хотите продолжить подключение (да / нет)?

Согласно Могу ли я автоматически добавлять новый хост в known_hosts? Я пробовал (с новым файлом known_hosts ):

ssh-keyscan -H [hostname],[ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts

Но это не работает, мне всегда предлагают принять отпечаток пальца.

Когда я позволяю ssh добавить это за меня, хеш ключа в файле know_hosts сильно отличается.

Что еще мне следует сделать для устранения этой проблемы?

8
задан 13 April 2017 в 15:14
2 ответа

Попробуйте следующее:

ssh-keyscan -t rsa [ip_address]

Возьмите результат и вставьте его в .ssh / known_hosts. Теперь, если вы хотите хешировать known_hosts, сделайте следующее:

ssh-keygen -H

edit: Вот единственное решение команды. Он использует имя хоста, IP-адреса и хеши.

ssh-keyscan -Ht rsa [hostname],[IP address] >> known_hosts
6
ответ дан 2 December 2019 в 22:59

Ответ kschurig подойдет, но не обязательно самый безопасный. Он действительно получает бонусные баллы за дополнительную милю, позволяющую идентифицировать сервер более чем по одному URI, то есть по имени хоста и IP-адресу. То есть вы можете продолжать добавлять действительные URI этого хоста, расширяя список с разделителями-запятыми.

Однако я искал мирский способ обойти неизвестное ручное взаимодействие хоста при клонировании репозитория git, как показано ниже, и он должен помочь в объяснении того, что происходит, и как вы можете избежать этой части написания сценария для некоторых вещей, связанных с SSH:

brad@computer:~$ git clone git@bitbucket.org:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

Обратите внимание на отпечаток ключа RSA ...

Итак, это вещь SSH, это будет работать для git через SSH и просто связанные с SSH вещи в целом ...

brad@computer:~$ nmap bitbucket.org --script ssh-hostkey

Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
| ssh-hostkey:
|   1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_  2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds

Во-первых, установите nmap на свой ежедневный драйвер. Nmap очень полезен для определенных вещей, таких как обнаружение открытых портов и это - ручная проверка отпечатков SSH. Но вернемся к тому, что мы делаем.

Хорошо. Я либо скомпрометирован в нескольких местах и ​​на машинах, которые я проверил, либо более правдоподобное объяснение того, что все происходит, - это то, что происходит.

Этот «отпечаток пальца» - это просто строка, сокращенная односторонним алгоритмом для удобства человека существует риск того, что несколько строк могут превратиться в один и тот же отпечаток. Такое случается, они называются коллизиями.

Тем не менее, вернемся к исходной строке, которую мы можем видеть в контексте ниже.

brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg

Итак, заблаговременно, у нас есть способ запросить форму идентификации у исходного хоста .

На этом этапе мы вручную так же уязвимы, как и автоматически - строки совпадают, у нас есть базовые данные, которые создают отпечаток пальца, и мы могли бы запросить эти базовые данные (предотвращение конфликтов) в будущем.

Теперь использовать эту строку таким образом, чтобы не спрашивать об аутентичности хоста ...

Файл known_hosts в этом случае не использует записи открытого текста. Вы узнаете хешированные записи, когда увидите их, они выглядят как хеши со случайными символами вместо xyz.com или 123.45.67.89.

brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==

Вызывает раздражение первая строка комментария, но вы можете избавиться от нее простым перенаправить через соглашение ">" или ">>".

Поскольку я сделал все возможное, чтобы получить незапятнанные данные, которые будут использоваться для идентификации "хоста" и доверия, я добавлю этот идентификатор в свой файл known_hosts в моем Каталог ~ / .ssh. Поскольку теперь он будет идентифицирован как известный хозяин, я не получу упомянутого выше приглашения, когда вы были молодым человеком.

Спасибо, что оставались со мной, пожалуйста. Я добавляю RSA-ключ bitbucket, чтобы я мог взаимодействовать с моими репозиториями git в неинтерактивном режиме как часть рабочего процесса CI, но все, что вы делаете, что хотите.

#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts

Итак, вот как вы остаетесь девственником на сегодня. Вы можете сделать то же самое с github, следуя аналогичным указаниям в свое время.

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

НЕПРАВИЛЬНО ssh -oStrictHostKeyChecking = нет имени хоста [команда]

НЕПРАВИЛЬНО ssh-keyscan -t rsa -H hostname >> ~ / .ssh / known_hosts

Пожалуйста, не делайте ничего из вышеперечисленного. Вам предоставляется возможность повысить свои шансы избежать подслушивания ваших передач данных через человека, находящегося в центре атаки - воспользуйтесь этой возможностью. Разница в том, что буквально подтверждается, что ключ RSA, который у вас есть, является ключом добросовестного сервера, и теперь вы знаете, как получить эту информацию, чтобы сравнить их, чтобы вы могли доверять соединению. Просто помните, что большее количество сравнений с разных компьютеров и сетей обычно увеличивает вашу способность доверять соединению.

4
ответ дан 2 December 2019 в 22:59

Теги

Похожие вопросы