Я пытаюсь написать функцию оболочки, которая запускается как sh процесс и аутентифицируется паролем. Затем я хотел бы использовать порожденный процесс, чтобы делать дальнейшие вещи с ожидаемым результатом.
Вот функция, которую я имею до сих пор:
ssh_cmd() {
ssh $USER@$HOST 2>&1 | expect -c "
log_user 0
set timeout 5
expect password: {
send \"$PASS\n\"
sleep 2
log_user 1
}
"
}
И затем я хотел бы использовать данный в других местах, чтобы взаимодействовать с процессом s sh следующим образом:
ssh_cmd | expect -c "
expect '#' {
send pwd\n
send exit\n
}
expect eof
"
Однако, запустив функцию ssh_cmd
с параметром -d
для ожидаемого результата, я получаю следующий результат:
expect version 5.45.4
expect: does "" (spawn_id exp0) match glob pattern "password:"? no
ubnt@ui1's password: expect: timed out
Насколько я понимаю, вывод ssh
не передается правильно. Я знаю, что обычным способом сделать это было бы использование spawn
, но это означало бы, что процесс завершился бы после ожидаемых выходов, и у меня не могло быть обобщенной функции c, которая аутентифицирует сеансы sh и поддерживает процесс жив для дальнейшего использования.