Довольно часто я переводил серверы в режим восстановления, и это, очевидно, меняет ключ хоста. Так что бывают ситуации, когда я знаю, что ключ хоста 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-клиента, которая в случае другого ключа хоста просит заменить текущий ключ хоста или просто временно игнорировать проблему и продолжить.
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
Небольшое объяснение:
Добавьте к этим записям префикс имени сервера и поместите их в конфигурацию DNS.
Затем убедитесь, что все ваши машины будут связываться с вашим DNS-сервером в /etc/resolv.conf
.
Наконец, положим VerifyHostKeyDNS=yes
вариант в .ssh/config
файл на каждом сервере.