У меня есть этот маленький сценарий для соединения с новыми машинами, к которым у меня нет ssh-ключа:
function my_ssh () {
ip=$1
optional_cmd=$2
ssh -o "BatchMode yes" user_name@$ip exit > /dev/null 2>&1
if [ $? -gt 0 ]; then
echo "1st time connection - adding key to authorized keys list"
sshpass -p "secret_password" ssh-copy-id user_name@$ip
fi
echo $optional_cmd
ssh -X user_name@$ip $optional_cmd
}
Это работает weel на серверы, которые или иметь мой ssh-ключ, или только просят пароль для использования ssh-copy-id. Однако некоторые серверы требуют "да/нет" после следующего вопроса:
Подлинность хоста 'A.B.C.D ()' не может быть установлена. Цифровой отпечаток ключа ECDSA является SHA256: ****. Вы уверены, что хотите продолжить соединяться (да/нет)?
Как я могу добавить "да" строка, отраженная в вопрос о сервере stdin, и затем использовать sshpass?
PS, я пробежался через код sshpass из GitHub, но это не кажется sshpass
разработан для чего-то вроде этого. Я думаю, что могу изменить его к комплекту мои потребности, но я предпочитаю использовать нормальный механизм Linux, если это возможно,
Обходное решение:
list.txt
vm1.example.com
vm2.example.com
vm3.example.com
...
for i in $(cat list.txt); do timeout 1 ssh -o StrictHostKeyChecking=no user@$i; done
for i in $(cat list.txt); do ssh-copy-id -i user@$i; done
ssh user@vm1.example.com -- no pass