Временно игнорировать мой файл `~ / .ssh / known_hosts`?

48

Есть ли способ временно игнорировать мой ~/.ssh/known_hostsфайл?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

НОТА:

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

Alexus
источник
9
Вы задаете не тот вопрос. Вы не должны "игнорировать" проблему; Вы должны выяснить, что происходит и решить это.
Майкл Хэмптон
9
Я не могу говорить за пользователя, но одним примером может быть ситуация, когда вы разрабатываете процесс автоматической установки (такой как кикстарт), где ваш итеративный рабочий процесс включает в себя сборку, подключение, тестирование, изменение процесса сборки и восстановление из царапать снова и снова.
Голадус
10
@MichaelHampton - я получаю это все время, поскольку VMware и VirtualBox перерабатывают IP-адреса для гостей. Для меня это правильный вопрос :)
1
FWIW Я продолжаю искать этот ответ, потому что в моей локальной сети есть система, в которой я использую dropbear (с другим ключом хоста) для ввода пароля шифрования диска во время запуска.
Зулан
1
@jww Это неправильный вопрос / решение для вашего сценария. Вместо этого вы должны настроить SSH так, чтобы он игнорировал IP-адрес, но все же проверял ключ хоста. Смотрите, например, здесь
Джон Бентли

Ответы:

56

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

Другой вариант - добавить конкретную запись для вашего ~/.ssh/configхоста. Это может быть правильным подходом, если у вас есть определенный хост, который генерирует новые ключи хоста каждый раз, когда он перезагружается, и он перезагружается по уважительной причине несколько раз в день.

Host <your problematic host>
  StrictHostKeyChecking no
Сами Лэйн
источник
это ожидаемое поведение) так что это нормально (в моем случае)
alexus
1
@alexus Если это «ожидаемый», то вы можете применить опцию к определенному имени хоста / IP, для которого вы ожидаете, что это произойдет.
Хрилис - на забастовку -
1
@alexus И помните, что если вы сделаете это, вы в значительной степени потеряете всю защиту, которую обеспечивает ssh. С тем же успехом вы можете использовать telnet, поскольку для кого-то будет тривиально перехватить вас и захватить весь ваш трафик.
Майкл Хэмптон
1
Это больше не работает (по крайней мере, для OpenSSH_5.3p1)
draeath
-o StrictHostKeyChecking=noудаляет возможность войти с паролем. Разве отсутствие флага для этого не идет вразрез с принципами Unix, позволяющими пользователю принудительно управлять поведением? В настоящее время я пытаюсь войти на локальный компьютер с локальным IP. Ключ хоста изменился, потому что я переформатировал упомянутую машину. Все здесь имеет смысл, и ничто не является угрозой безопасности в данных обстоятельствах.
Wowfunhappy
31

Чтобы полностью игнорировать ваш известный файл hosts в среде POSIX, установите параметры GlobalKnownHostsFileи UserKnownHostsFileв /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Установка этого StrictHostKeyChecking=noпараметра позволит вам подключиться, но SSH по- прежнему будет отображать предупреждение :

ssh -o StrictHostKeyChecking=no user@host

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

MattB
источник
2
Это может быть лучшим ответом, чем самый высокий в настоящее время проголосованный, потому что он позволяет использовать аутентификацию по паролю, которая была бы отключена в противном случае (конечно, вы должны понимать, что именно вы делаете, прежде чем вводить свой пароль ...)
VZ.
Я немного смущен здесь: не вы должны также использовать -o StrictHostKeyChecking=no в дополнение к в -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullвариантах - для окончательного ответа: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Габриэль Стейплс
Связанные рецензии я нашел онлайн: shellhacks.com/disable-ssh-host-key-checking
Габриэль Стейплс
5

Если вы переустановили сервер и, следовательно, Идентификация изменилась, вам просто нужно удалить указанную строку 155 с /Users/alexus/.ssh/known_hostsи продолжить.

Если вы переключаетесь между разными частными сетями, вы должны использовать вместо них имена хостов, так как клиент ssh также будет сохранять ключи в зависимости от имени хоста. Добавьте что-то вроде этого к себе /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

а затем использовать ssh server1при подключении к подсети 1 и ssh server2при подключении к подсети2. Таким образом, оба сервера могут иметь разные хост-ключи.

etagenklo
источник
Что если вы переключаетесь между двумя частными сетями и подключаетесь к двум одинаковым IP?
alexus
1
Я отредактировал свой ответ.
etagenklo
2
@alexus Тогда вам нужен IPv6 :) Но это была бы полезная информация в вашем первоначальном вопросе.
Майкл Хэмптон
2

-o StrictHostKeyChecking=no работает только в том случае, если хост отсутствует в файле known_hosts.

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

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Хосе Са
источник
2

Некоторые люди говорят, что это неправильно, вы не должны делать это и так далее, но мне нужно это также, чтобы снова и снова тестировать несколько встроенных устройств. Вы должны отключить StrictHostKeyChecking=no, это правильно, но также сбросить файл известных хостов в /dev/null. Вот пример с автологином и psна удаленном устройстве.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
eddso
источник
-2

Войдите на все ваши серверы (и, если RedHat), rm -f /etc/ssh/ssh_host_*а затем перезапустите SSHD.

Это создаст новые ключи хоста SSH, которые не нужно игнорировать.

Я могу вспомнить только один случай, когда ключи SSH, клонированные на нескольких серверах, не только желательны, но и не выдают никаких предупреждений. Кратно одной записи. Все хосты с записью A имеют одинаковый ключ.

Нильс
источник
6
Этот ответ неверен. Отпечаток локально на клиенте.
89c3b1b8-b1ae-11e6-b842-48d705