Назад | Перейти на главную страницу

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

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

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

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

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

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

alias sshnk="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

Решение 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-сервер в вашей инфраструктуре, вы должны настроить SSHFP Записи DNS для централизованной обработки изменений открытого ключа вашего компьютера и избежания повсюду суеты самодельных скриптов.

Получите записи 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 файл на каждом сервере.