Как использовать ожидаемый для подключения через SSH к системе и изменить пароль хост-системы? - PullRequest
2 голосов
/ 31 декабря 2010

Я автоматизирую процесс:
Подключитесь к системе с именем «alpha» через ssh с паролем «alpha» для имени пользователя «alpha». После подключения я хотел бы установить пароль пользователя root («kickass»). Система, к которой я подключаюсь, по умолчанию не имеет пароля root. Я написал этот сценарий ожидаемого выполнения, но он не работает последовательно. Он работает один раз, а затем, если я изменю пароль для повторного тестирования, он ожидает запроса «Введите новый пароль UNIX:» после выдачи «sudo passwd root». Есть идеи?

#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
set force_conservative 1  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} {
    set send_slow {1 .1}
    proc send {ignore arg} {
        sleep .1
        exp_send -s -- $arg
    }
}

set timeout -1
spawn ssh alpha@$arg1
match_max 100000
expect -exact "password: "
send -- "alpha\r"
expect -exact "alpha@alpha:~\$ "
send -- "sudo passwd root\r"
expect -exact "password for alpha: "
send -- "alpha\r"
expect -exact "new UNIX password: "
send -- "kickass\r"
expect -exact "Retype new UNIX password: "
send -- "kickass\r"
expect -exact "alpha@alpha:~\$ "
send -- "exit\r"
expect eof

Спасибо.

1 Ответ

2 голосов
/ 24 января 2011

Расширение комментария Андрея Сфрента:

У Sudo обычно есть какое-то значение времени ожидания, поэтому, если вы введете вторую команду sudo в течение периода ожидания, вам больше не придется запрашивать пароль,Вы можете изменить код так:

send -- "sudo passwd root\r"
expect {
        -exact "password for alpha: "
            {
                send -- "alpha\r"
                exp_continue
            }

        -exact "new UNIX password: "
            {
                send -- "kickass\r"
            }
        }
...