Вставьте пароль через ожидание соединения s sh - PullRequest
1 голос
/ 02 августа 2020

Я довольно долго борюсь, но я не могу заставить его работать ... Скрипт запущен на сервере HPUX 11.31 ... Пробовал гуглить и тестировать много вариантов, но ни один не работает ... любая идея? Кажется, что пароль вставлен, но не выполняется ["ввод не нажат"] Большое спасибо за совет.

Домашняя страница: cat MyScript.exp

#!/usr/local/bin/expect -d

set prompt {[#$] }
lassign $argv username server password

spawn /usr/bin/ssh $server -l $username ls -la /folder | /usr/bin/grep -c -i "MyFile"
expect {
 "*password:*" { send "$password\r" }
}

---- отладка запустить ----

Home: ./MyScript.exp MyUserName MyServer MyPassword

expect version 5.45
argv[0] = /usr/local/bin/expect  argv[1] = -d  argv[2] = ./MyScript.exp  argv[3] = MyUserName  argv[4] = MyServer  argv[5] = MyPassword
set argc 3
set argv0 "./MyScript.exp"
set argv "MyUserName MyServer MyPassword"
executing commands from command file ./MyScript.exp
spawn /usr/bin/ssh MyServer -l MyUserName ls -la /folder | /usr/bin/grep -c -i MyFile
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {18256}
expect: does "" (spawn_id exp4) match glob pattern "*password:*"? no
MyUserName@MyServer's password:
expect: does "MyUserName@MyServer's password: " (spawn_id exp4) match glob pattern "*password:*"? yes
expect: set expect_out(0,string) "MyUserName@MyServer's password: "
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) "MyUserName@MyServer's password: "
send: sending "MyPassword\r" to { exp4 }

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Не уверен, что это случай "ожидать eof" ... Я вызываю сценарий из другого сценария, например,>

$PATH/iLO_checkEXP.exp $FQDNSERVER $USER $PASSWORD > /tmp/$SERVER-SHOWALL.LOG

Выходные данные соединения s sh должны быть сохранены в /tmp/$SERVER-SHOWALL.LOG, чтобы я мог найти текст, который ищу, с помощью grep.

Содержимое скрипта iLO_checkEXP.exp>

#!/usr/local/bin/expect

set timeout 120
set hostname [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn /usr/bin/ssh -l $username -oHostKeyAlgorithms=+ssh-dss $hostname
expect "*: "
send "$password\r"
send "CommandWhichProvideOutput\r"
send "exit\r"
interact
0 голосов
/ 02 августа 2020

Если это весь ваш скрипт, то после того, как вы отправите пароль, скрипт завершится, установив с ним соединение s sh. Сделайте вашу последнюю строку

expect eof

Это будет ждать, пока соединение s sh не завершится корректно.

...