ssh: подлинность хоста 'hostname' не может быть установлена

когда я ssh к машине, иногда я получаю это предупреждение об ошибке, и он предлагает сказать "да" или "нет". Это вызывает некоторые проблемы при запуске из скриптов, которые автоматически SSH на другие машины.

Предупреждение:

The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

есть ли способ автоматически сказать " да " или игнорировать это?

12 ответов


в зависимости от вашего ssh-клиента вы можете установить параметр StrictHostKeyChecking в нет в командной строке и/или отправить ключ в файл null known_hosts. Эти параметры также можно задать в конфигурационном файле для всех узлов или для заданного набора IP-адресов или имен узлов.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

редактировать

Как отмечает @IanDunn, для этого существуют риски безопасности. Если ресурс, к которому вы подключаетесь, был подделан злоумышленником, они могут потенциально воспроизведите вызов целевого сервера обратно к вам, обманывая вас, думая, что вы подключаетесь к удаленному ресурсу, в то время как на самом деле они подключаются к этому ресурсу с вашими учетными данными. Вы должны тщательно рассмотреть, является ли это подходящим риском, прежде чем изменять механизм соединения, чтобы пропустить HostKeyChecking.

ссылка.


старый вопрос, который заслуживает лучшего ответа.

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

включите в свой скрипт следующую логику:

if [ -z `ssh-keygen -F $IP` ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

он проверяет, находится ли открытый ключ сервера в known_hosts. Если не запрашивает открытый ключ с сервера и добавляет его в known_hosts.

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

  • обеспечение первого подключения скрипта по защищенному каналу
  • проверка журналов или known_hosts для проверки отпечатков пальцев вручную (только один раз)

чтобы отключить (или отключить управление), добавьте следующие строки в начало /etc/ssh/ssh_config...

Host 192.168.0.*
   StrictHostKeyChecking=no
   UserKnownHostsFile=/dev/null

варианты:

  • подсеть хоста может быть * разрешить неограниченный доступ ко всем IPs.
  • редактировать /etc/ssh/ssh_config для глобальной конфигурации или ~/.ssh/config для пользовательской конфигурации.

см http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

похожие вопрос о superuser.com -смотри https://superuser.com/a/628801/55163


убедится ~/.ssh/known_hosts запись. Это все исправило.


отредактируйте файл конфигурации, обычно расположенный в'~/.ssh / config', и в начале файла добавьте следующие строки

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

пользователь установлен в your_login_user говорит, что эти настройки принадлежат your_login_user
StrictHostKeyChecking установлен в НЕТ будет избежать приглашения
IdentityFile-это путь к ключу RSA

это работает для меня и моих скриптов, удачи вам.


лучший способ сделать это-использовать ' BatchMode 'в дополнение к'StrictHostKeyChecking'. Таким образом, ваш скрипт примет новое имя хоста и запишет его в файл known_hosts, но не потребует вмешательства "да/нет".

ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"

это предупреждение выдается из-за функций безопасности, не отключайте эту функцию.

он отображается только один раз.

если он все еще появляется после второго соединения, проблема, вероятно, в письменной форме . В этом случае вы также получите следующее сообщение:

Failed to add the host to the list of known hosts 

вы можете исправить это путем изменения владельца изменение разрешения файла для записи.

sudo chown -v $USER ~/.ssh/known_hosts

со ссылкой на ответ Кори я изменил его и использовал команду ниже, которая работает. Без exit, оставшаяся команда фактически регистрировалась на удаленной машине, чего я не хотел в скрипте

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"

Как правило, эта проблема возникает, когда вы изменяете ключи очень часто. На основе сервера может потребоваться некоторое время для обновления нового ключа, созданного и вставленного на сервере. Поэтому после генерации ключа и вставить в сервер, подождите от 3 до 4 часов, а затем попробовать. Проблема должна быть решена. Это случилось со мной.


этого -> chmod +w ~/.СШ/если вы Это добавляет запись в файл ~/.СШ/если вы. После этого удаленный хост будет добавлен в файл known_hosts при следующем подключении к нему.


в идеале, вы должны создать самоуправляемый центр сертификации. Начать с generating a key pair: ssh-keygen -f cert_signer

затем подпишите открытый ключ хоста каждого сервера: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

это создает подписанный открытый ключ хоста: /etc/ssh/ssh_host_rsa_key-cert.pub

на /etc/ssh/sshd_config, точка HostCertificate в этот файл: HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

перезапустите службу sshd: service sshd restart

затем на клиенте SSH добавьте следующее в ~/.ssh/known_hosts: @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

выше содержит:

  • @cert-authority
  • домен *.example.com
  • полное содержимое открытого ключа cert_signer.pub

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

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

дополнительные сведения см. В разделе этой странице.


Я решаю проблему, которая дает ниже письменную ошибку:
Ошибка:
Подлинность хоста ' XXX.XXX.XXX ' не может быть установлен.
Отпечаток ключа RSA 09:6c:ef:cd:55:c4:4f:ss:5a:88:46:0a:a9:27:83: 89.

устранение:
1. установите любой инструмент openSSH.
2. выполнить команду ssh
3. он попросит, чтобы вы добавили этот хост. принять да.
4. Этот узел будет добавлен в список известных хостов.
5. Теперь вы можете подключиться к этому хозяин.

Это решение работает сейчас......