Игнорировать или заменить ключ хоста, если он отличается
Довольно часто я помещаю серверы в режим восстановления, и это, очевидно, меняет ключ хоста. Так что есть ситуации, когда я знаю, что ключ хоста 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"