LINUX.ORG.RU
ФорумAdmin

Автоматизация ответов на вопросы в bash скриптах.

 ,


0

1

Здравствуйте! Прежде чем описать проблему, хочу рассказать, что предварительно погуглил, нашел даже ответ, но те варианты, которые я нашел не знаю как их реализовать. Собственно суть проблемы, недавно увлекся программированием на bash, сейчас работаю над автоматизацией одной задачки и уперся в такую проблему, мне надо по ssh зайти на другой сервер, выполнить там ряд команд и вернуться, почитал, погулгил, задача не сложная, есть утилиты expect, yes, emples. Выбрал expect по настройке вроде не сложно, но столкнулся с проблемой, что на вопросы она не отвечает, ниже пример кода, который использую, ткните что не так...

#!/bin/bash
#expect -c 'spawn ssh root@host; expect "password:" {send -- "\$

expect << EOF
        spawn ssh root@host
        expect "(yes/no)?*" {send "yes\r"}
        expect "password:" {send "_mypass_\r"}
        expect "$*"
        send "cat /tmp/test.sh\r"
        send "exit\r"
        expect eof
EOF

В общем твои проблемы решаются опциями команды ssh, StrictHostKeyChecking no UserKnownHostsFile=/dev/null (если не хочешь сохранять и потом проверять отпечаток) и пароль можно с помощью утилиты sshpass.

bl ★★★ ()
Последнее исправление: bl (всего исправлений: 1)
Ответ на: комментарий от AnonimS

Могут угнать имя или, подменить ип целевого хоста, поставить туда специальный sshd, а ты проигнорируешь что это не тот отпечаток ссш, который ты знаешь. И ты введена пароль, злоумышленник узнает пароль

bl ★★★ ()
#!/bin/bash

expect <<EOF
        spawn ssh root@host
        expect "(yes/no)?*" { send "yes\r" }
        expect "password:" { send "_mypass_\r" }
        expect "# " { send "cat /tmp/test.sh\r" }
        expect "# " { send "exit\r" }
EOF

Так должно работать.

p.s а вообще ansible как раз для этих целей

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

Спасибо, работает. Ну насколько я понял есть масса других вариантов оказывается, завтра думаю рассмотрю более подробно.

AnonimS ()

Блин, неужели правда проще изобретать городушки с expect, чем один раз выполнить ssh-keygen -f ~/.ssh/root@host -P '' && ssh-copy-id -i ~/.ssh/root@host root@host, а потом всю оставшуюся жизнь выполнять ssh -i ~/.ssh/root@host root@host any_goddamn_command?

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

Бывают случаи что лучше изобрести с expect. Не буду приводить примеры ибо это слишком долго и нудно, но раз мне в жизни пригодились ключи, в то время как сервак перешел под чужое управление и те поменяли пароли, значит такое имеет место быть. (никакого взлома или гадостей, только молчаливая борьба в одной большой организации между разделенными подразделениями) Еще знаю пару примеров где по другой причине (причину не озвучу) не стал бы использовать ключи.

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

Вот с эти согласен, впрочем об sshpass уже написали выше. Я не правильно написал expect, правильно надо было читать «доступ по паролю».

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

sshpass действительно проще, я думаю попробую как раз через него и писать, expect все же сложнее..

AnonimS ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.