스크립트가 자동으로 로그인하고 명령을 내리고 출력을 표시할 것으로 예상합니다.

스크립트가 자동으로 로그인하고 명령을 내리고 출력을 표시할 것으로 예상합니다.

저는 스크립팅을 처음 접했고 도움이 필요합니다. ssh/logHP StoreOnce 어플라이언스에 자동으로 들어갈 Linux 서버에서 예상 스크립트를 만들고 있습니다.

#!/usr/bin/expect -f
set password "password"
match_max 1000
spawn ssh -o StrictHostKeyChecking=no [email protected]
expect "*?assword:*"
send -- "$password\r"
send -- "\r"
interact

이 스크립트를 실행할 때 자동으로 로그인하고 거기에서 명령을 입력할 수 있습니다.

아래 출력을 참조하세요.

=================================================================
[root@dpis tmp]# ./test.exp
spawn ssh -o StrictHostKeyChecking=no [email protected]
Password:
Last login: Thu Jan 26 08:37:24 2017 from 10.x.x.x

Welcome to the HP StoreOnce Backup System Command Line Interface.
Type 'help' at the prompt for context-sensitive help.

>

그러나 내가 달성하고 싶은 것은 스크립트가 자동으로 로그인할 뿐만 아니라 자동으로 명령을 입력하고 출력을 표시한 다음 종료하도록 하는 것입니다.

상호 작용 후에 다음 줄을 추가해 보았습니다.

expect ">"

send -- "serviceset show status"

이를 달성하는 방법에 대한 도움을 찾고 계십니까? 감사해요!

답변1

좋은 출발을 하셨습니다. 명령을 입력하려면 Enter 키를 눌러야 합니다(문자를 보내려면 \r). 그런 다음 결과를 표시하려면 다른 프롬프트를 기다려야 합니다.

expect ">"
send -- "serviceset show status\r"
expect ">"

예상대로 출력을 캡처하는 것은 약간의 PITA입니다. 다음을 수행할 수 있습니다.

# at the top of the program
log_user 0
# ... log in ...
expect ">"

set cmd "serviceset show status\r"
send -- $cmd
expect -re "$cmd\n(.*)\r\n>"
set output $expect_out(1,string)
puts $output

# disconnect
send -- "exit\r"
expect eof

관련 정보