автоматизируйте sshpass, когда сервер спросит “да/нет” вопрос

У меня есть этот маленький сценарий для соединения с новыми машинами, к которым у меня нет 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, если это возможно,

1
задан 18 February 2019 в 05:55

1 ответ

Обходное решение:

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
-1
ответ дан 26 October 2019 в 05:39

Другие вопросы по тегам:

Похожие вопросы: