Как написать сценарий условного ожидания для принятия другого набора паролей на основе серверов? - PullRequest
0 голосов
/ 04 октября 2019

Мое требование - написать сценарий ожидания , который будет ожидать различный набор паролей для другого набора серверов переходов. Беда в том, что я не могу обобщить expect 'Password:', поскольку оно является общим для разных серверов. Поэтому мой единственный способ идентифицировать сервер - это предварительно прочитать баннер, проверить наличие определенной строки и отправить соответствующий пароль.

Я не знаю, как прочитать баннер вожидайте команду для spawn ssh

Мой код такой, как показано ниже

#!/usr/bin/expect

set host [lindex $argv 0]

set pass1 'xxx'
set pass2 'yy'

spawn ssh $host
expect "Password:*"
send "$pass1\r"
expect {
"Password:*" {
        send "$pass2\r"
        exp_continue
    }
}

1 Ответ

0 голосов
/ 01 ноября 2019

Кажется странным, что вам нужно будет идентифицировать сервер на основе некоторой строки в баннере, который он возвращает, когда у вас уже есть его идентификатор в переменной $ host. Если указанное имя хоста не преобразуется в несколько серверов, которые не используют общий пароль.

При условии, что каждая из хостов выдает такую ​​ситуацию и баннер, на котором написано "Welcome to servername ", вы можете сделать что-то вродеthis:

#!/usr/bin/expect

set host [lindex $argv 0]
spawn ssh $host

expect {
    -ex {Welcome to server1} {
        set pass "xxx"
    }
    -ex {Welcome to server2} {
        set pass "yy"
    }
    default {
        # Something unexpected happened
        exit 1
    }
}

expect {
    -ex "Password: " {
        send "$pass\r"
    }
}

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

...