Есть ли способ временно игнорировать мои ~/.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$
НОТА:
.. по нескольким ответам / комментариям я понимаю, что мой вопрос немного вводит в заблуждение, так что он короткий ожидаемое поведение), так что это нормально (в моем случае) есть веская причина, почему я хочу видеть "игнорировать это")
Ты можешь использовать ssh -o StrictHostKeyChecking=no
выключить проверку known_hosts
мгновенно. Но я бы не советовал этого делать. Вы действительно должны проверить, почему ключ хоста изменился.
Другой вариант - добавить конкретную запись в ваш ~/.ssh/config
для рассматриваемого хоста. Это может быть допустимым подходом, если у вас есть определенный хост, который генерирует новые ключи хоста каждый раз, когда он перезагружается, и он перезагружается по уважительной причине несколько раз в день.
Host <your problematic host>
StrictHostKeyChecking no
Чтобы полностью игнорировать ваш файл известных хостов в среде 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 для проверки хостов, например.
Если вы переустановили сервер и поэтому идентификация изменилась, вам следует просто удалить указанную строку 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. Таким образом, оба сервера могут иметь разные ключи хоста.
Некоторые люди говорят, что это неправильно, вы не должны делать это и так далее, но мне это также нужно, чтобы тестировать несколько встроенных устройств снова и снова. Вам нужно отключить StrictHostKeyChecking=no
, это правильно, но также сбросьте файл известных хостов на /dev/null
. Вот пример с автологином и ps
на удаленном устройстве.
sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
-o StrictHostKeyChecking=no
работает только в том случае, если хост еще не указан в файле known_hosts.
Я думаю, что это чище (без предупреждений), если вы ожидаете, что ключ 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"
Войдите на все свои серверы (и если RedHat) rm -f /etc/ssh/ssh_host_*
а затем перезапустите SSHD.
Это создаст новые ключи хоста SSH, которые не нужно игнорировать.
Я могу вспомнить только один случай, когда ключи SSH, клонированные на нескольких серверах, не только желательны, но и не вызывают никаких предупреждений. Количество, кратное одной записи A. Все хосты с записью A имеют один и тот же ключ.