it-roy-ru.com

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.

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

132
Senthil A Kumar

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

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

ПРАВКА

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

Ссылка .

112
cori

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

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

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

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

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

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

  • убедитесь, что сценарий подключается впервые по безопасному каналу
  • проверка журналов или known_hosts для проверки отпечатков пальцев вручную (выполняется только один раз)
65
Grzegorz Luczywo

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

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

Опции:

  • Подсеть Host может быть *, чтобы разрешить неограниченный доступ ко всем IP-адресам.
  • Отредактируйте /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

33
Jim Fred

Убедитесь, что ~/.ssh/known_hosts доступен для записи. Это исправило это для меня.

15
richard

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

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

Пользователь, установленный на your_login_user, говорит, что эти настройки принадлежат your_login_user
StrictHostKeyChecking, установленный в no, будет избегать запроса
IdentityFile - это путь к ключу RSA. 

Это работает для меня и моих сценариев, удачи вам.

10
Carlos M G T

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

ssh -o BatchMode=yes -o StrictHostKeyChecking=no [email protected] "uptime"
9
Cory Ringdahl

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

Это просто отображается один раз. 

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

Failed to add the Host to the list of known hosts 

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

Sudo chown -v $USER ~/.ssh/known_hosts
6
Sfisioza

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

ssh -o StrictHostKeyChecking=no [email protected]_of_remote_machine "exit"
4
Chintamani Manjare

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

2
mk..

В идеале вы должны создать центр сертификации с самостоятельным управлением. Начните с создания пары ключей: 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

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

Для получения более подробной информации см. эта страница вики

1
Robert Chen

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

1
Akshayraj Kore

Добавьте их в ваш/etc/ssh/ssh_config

Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
0
Kevin Nguyen

Запустите это на хост-сервере, это проблема предвидения 

chmod -R 700 ~/.ssh
0
Robert A