При подключении к различным *nix-системам посредством ssh в файл ~/.ssh/known_hosts ssh клиент записывает ключ сервера, определяющий уникальность системы, к которой производилось подключение. При последующем подключении к удаленной системе по этому же ip-адресу происходит проверка соответствия ключа сервера и, в том случае если ключ для данного хоста или ip-адреса изменился, подключение не будет установлено и на экран будет выведено предупреждение. Это необходимо для того, чтобы не произошла компрометация пароля в том случае, если данный ip-адрес теперь используется другой системой или, например, если произошла умышленная подмена для перехвата пары логин/пароль. Однако, бывает и вполне "легальная" смена ключа удаленного сервера, например, в том случае, если была переустановлена ОС или просто заменены ключи ssh сервера. В этом случае необходимо удалить запись о хосте в файле known_hosts с помощью команды ssh-keygen или удалить файл целиком, что не всегда удобно в том случае, если хосту назначено несколько ip-адресов. Скрипт, приведенный в данном примере автоматически найдет в файле known_hosts ключ, соответствующий как самому хосту, так и всем его ip-адресам, и удалит их, оставив без изменений всю остальную информацию.
Для создания скрипта скопируйте следующий код в любой текстовый редактор, например, vi или gedit:
#!/bin/bash
host="$1"
[[ $# -eq 0 ]] && { echo "Использование: $0 имя.хоста.com"; exit 1;}
ips=$(host "$host" | awk -F'address' '{ print $2}' | sed -e 's/^ //g')
ssh-keygen -R "$host"
for i in $ips
do
ssh-keygen -R "$i"
done
Сохраните скрипт, например, под именем script.sh
Добавьте права на выполнения файлу скрипта:
chmod +x script.sh
Для использования скрипта, вызовите его, передав в качестве параметра хост, ключи которого необходимо удалить, например так:
./script.sh howtoit.ru
Комментарии