expect 스크립트를 사용하여 ssh 로그인을 자동화하는 Bash 스크립트를 만들었습니다.이 스크립트는 여러 서버에 연결하고 일부 명령을 실행합니다. bash 스크립트는 로그인 자격 증명을 입력하라는 프롬프트를 한 번 표시합니다.Bash로부터 호출 된 Expect 스크립트의 종료 상태 코드
다음 서버에 대한 스크립트 검사를 피하기 위해 첫 번째 서버에 대한 로그인이 실패하면 스크립트가 종료되는 기능을 통합하여 사용자 계정이 잠기는 결과를 가져오고 싶습니다. 계정 잠금은 3 회 연속 로그인 실패로 발생하고 스크립트가 연결하려고 시도하는 서버 수가 3을 초과합니다.
이것은 expect 스크립트를 호출하는 bash 스크립트의 스 니펫입니다.
countu=0
for servername in $(cat $linux_host_list)
do
./script.expect $LUSERNAME $LPASS $servername Linux >> linux_log_file.txt & < /dev/null
let countl=countl+1
done
여기가 (script.expect
가) 내가 로그인이 잘못된 실패하면 bash는 명령이 0이 아닌 값을 반환한다고 가정 bash는 명령 출력 ($?
)을 잡아 시도
#!/usr/bin/expect -f
set timeout 30
set username [lindex $argv 0]
set SPASS [lindex $argv 1]
set servername [lindex $argv 2]
set case [lindex $argv 3]
set prompt "(%|#|\\$|%\]) $"
switch $case {
Linux {
log_user 0
spawn ssh -o StrictHostKeyChecking=no [email protected]$servername
expect {
"assword:" {
send "$SPASS\r"
expect -re "$prompt"
}
expect -re "$prompt"
}
send "sudo su -\r"
expect {
"assword:" { send "$SPASS\r" }
}
expect -re "$prompt"
log_user 1
send "opcagt -status ; opctemplate -l ; cat watch.cf 2> /dev/null\r"
expect -re "$prompt"
log_user 0
send "exit\r"
expect -re "$prompt"
log_user 1
}
스 니펫 기대 스크립트입니다 암호는 expect 스크립트에 있지만 작동하지 않습니다. 제안 사항을 보내 주시면 감사하겠습니다.
솔직히, 나는 기대 이상으로 이동하는 것을 주저합니다. Expect는 수년 동안 자동화 될 것으로 기대하지 않는 시스템 작업을 자동화하는 최고의 도구 중 하나였습니다. 다른 도구가 실제로 비교할 수없는 여러 가지 일을합니다 (예 : tty/사용자를 거의 완벽하게 시뮬레이트하는 기능). 그것은 Fabric이 좋지 않다는 것을 말하지 않습니다. 나는 그것에 대해 아무것도 모릅니다 ... 단지 Expect가 채울 큰 신발이 있습니다. – RHSeeger
나는이 작업을 위해서 Fabric이 만들어 졌기 때문에 이것을 제안했다. 해가되지 않습니다! – iElectric
원단이 멋지게 보입니다. 공유해 주셔서 감사합니다. –