Как заставить ssh принять новый отпечаток хоста из командной строки?

Я получаю стандартный

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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

сообщение об ошибке. Тем не менее, система (Appworx), которая выполняет команду (sftp, я думаю, не то, что она имеет значение) автоматизирована, и я не могу легко принять новый ключ, даже после проверки с сторонним поставщиком, что это действительное изменение. Я могу добавить новую оболочку script, которую я могу выполнить из одной и той же системы (и пользователя), но, похоже, не существует аргумента командной строки или командной строки, который будет передавать ssh для принятия ключа. Я не могу найти ничего на странице руководства или в Google. Это возможно?

Ответ 1

Здесь, как сказать своему клиенту доверять ключу. Лучший подход - дать ему ключ заранее, который я описал во втором абзаце. Это для клиента OpenSSH в Unix, поэтому я надеюсь, что это будет иметь отношение к вашей ситуации.

Вы можете установить параметр StrictHostKeyChecking. Он имеет опции yes, no и ask. По умолчанию используется ask. Чтобы установить его в системном масштабе, отредактируйте /etc/ssh/ssh_config; чтобы установить его только для вас, отредактируйте ~/.ssh/config; и установить его для одной команды, укажите параметр в командной строке, например.

ssh -o "StrictHostKeyChecking no" hostname

Альтернативный подход, если у вас есть доступ к ключам хоста для удаленной системы, заключается в том, чтобы заранее добавить их в ваш файл known_hosts, чтобы SSH знал о них и не задавал вопрос. Если это возможно, это лучше с точки зрения безопасности. В конце концов, предупреждение может быть правильным, и вы действительно можете подвергнуться нападению "человек в середине".

Например, здесь script, который будет извлекать ключ и добавлять его в файл known_hosts:

ssh -o 'StrictHostKeyChecking no' hostname cat /etc/ssh/ssh_host_dsa_key.pub >>~/.ssh/known_hosts

Ответ 2

Добавить следующий файл

~/.ssh/config

и это в файле как содержимое

StrictHostKeyChecking no

Эти настройки будут гарантировать, что ssh никогда не попросит проверку отпечатка пальца снова.

Ответ 3

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

Вместо этого используйте:

ssh-keygen -R hostname

Это заставит файл known_hosts обновляться, чтобы удалить старый ключ только для одного сервера, который обновил свой ключ.

Затем, когда вы используете:

ssh [email protected]

Он попросит вас подтвердить отпечаток пальца - как и для любого другого "нового" (т.е. Ранее невидимого) сервера.