Игнорировать или заменить ключ хоста, если он отличается

Довольно часто я помещаю серверы в режим восстановления, и это, очевидно, меняет ключ хоста. Так что есть ситуации, когда я знаю, что ключ хоста SSH будет изменен временно или навсегда. И каждый раз, когда мне нужно сделать:

  • ssh-keygeyn -R x.x.x.x
  • ssh x.x.x.x и подтвердите добавление нового ключа
  • Сделайте что-нибудь в режиме восстановления и перезагрузите сервер
  • ssh-keygen -R x.x.x.x
  • ssh x.x.x.x при необходимости и принять новый ключ хоста

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

2 ответа

Решение

Решение 1

Вы можете отсканировать новый открытый ключ удаленного хоста перед входом с ssh-keyscan команда.

ssh-keygen -R x.x.x.x
ssh-keyscan x.x.x.x >> ~/.ssh/known_hosts
ssh x.x.x.x

Затем вы можете сделать из этого скрипт, используя хост в качестве аргумента, и поместить его в свой PATH,

Чтобы проверить, отличаются ли открытые ключи, вы можете сделать это:

diff -q <(ssh-keygen -F x.x.x.x | sed '1d') <(ssh-keyscan x.x.x.x 2>/dev/null)

Решение 2

Теперь, если у вас есть DNS-сервер в вашей инфраструктуре, вы должны настроить DNS-записи SSHFP, чтобы централизованно обрабатывать изменения открытых ключей вашей машины и избежать повсеместных проблем с самодельными сценариями.

Получить записи DNS для настройки:

ssh-keygen -r /etc/ssh/ssh_host_key.pub

Результат будет выглядеть так:

IN SSHFP 1 1 d3fa9bcf2d51979c53bcac2961f38b60e4e60886
IN SSHFP 2 1 f1f09814dd79eea523f490808cf3c096f1d1a432

Маленькое объяснение:

  • Первое поле: IN = Интернет-класс
  • Второе поле: тип записи SSHFP
  • Третье поле: алгоритм (1=RSA, 2=DSA, 3=ECDSA)
  • Четвертое поле: тип отпечатка пальца (1=SHA-1, 2=SHA256)

Добавьте к этим записям имя сервера и поместите их в конфигурацию DNS.

Затем убедитесь, что все ваши машины будут связываться с вашим DNS-сервером в /etc/resolv.conf,

Наконец, положить VerifyHostKeyDNS=yes вариант в .ssh/config файл на каждом сервере.

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

будет обманывать ssh думать, что его список ключей /dev/null и не попросит вас подтвердить "добавить" ключ в (несуществующий) файл. Преимущество этого заключается в том, что вы не добавляете временный ключ в реальный файл.

Вы можете добавить псевдоним bash, чтобы использовать его.

alias sshnk="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
Другие вопросы по тегам