LINUX.ORG.RU
ФорумAdmin

Автоматизация ssh-copy-id

 


0

1

Добрый вечер! Начну с того, что автоматизировал генерацию ключа такой командой:

ssh-keygen -t rsa -f /home/paa/.ssh/id_rsa -q -P ""

Есть необходимость автоматизировать копирование ключа, чтобы выглядело примерно так:

ssh-copy-id -p мой_пароль 'host' 

Ничего подобного не нашёл, пытаюсь сделать через скрипт. Ввёл в терминал команду sh-copy-id 'host', записал, какие вопросы задаются и какие ответы я делаю и получилось следующее:

#!/usr/bin/expect -f
set timeout 2
spawn ssh-copy-id '192.168.56.103'
expect "Are you sure you want to continue connecting " {send "yes\n"}
expect "paa@192.168.56.103's password:" {send "2\n"}
expect eof 

Пытаюсь запустить это скрипт, система выдаёт сообщение:

spawn ssh-copy-id '192.168.56.103'
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/paa/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: ssh: Could not resolve hostname '192.168.56.103': Name or service not known

expect: spawn id exp4 not open
    while executing
"expect "paa@192.168.56.103's password:" {send "2\n"}"
    (file "/etc/ansible/ssh_copy_id" line 5) 

Почему одна и та же команда проходит, если ввести вручную, а через скрипт нет? Может, есть иной способ автоматизации этой команды?


Could not resolve hostname '192.168.56.103'

Думаю потому что expect по-другому парсит командную строку и не считает одинарные кавычки спецсимволом, передаёт их команде. Замени их на двойные или убери вообще.

Но оно скорее всего всё равно не будет работать - запрос пароля делается не через stdin/stdout (которые перехватываются expect-ом), а через controlling tty.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Но оно скорее всего всё равно не будет работать -

Будет. 2ТС в инете полно готовых примеров по запросу ssh expect, не изобретайте велосипед.

anc ★★★★★
()