원격 서버 [authorized_keys...]에 문제가 있으므로 expect
명령을 사용하여 서버에 SSH를 통해 연결하는 스크립트를 로컬 컴퓨터에 작성한 다음 cd
실행합니다 .git pull
하지만 나는 이것을 작동시킬 수 없습니다 :
#!/usr/bin/expect
spawn ssh USER@IP_ADDRESS
expect {
"USER@IP_ADDRESS's password:" {
send "PASSWORD\r"
}
"[USER@server ~]$" {
send "cd public_html"
}
}
interact
일부 문자를 이스케이프 처리해야 합니까? 시도하더라도 여전히 cd
명령을 무시합니다.
답변1
[
TCL에 특별하므로 "\[quotes]"
따옴표를 중괄호로 전달하거나 대체하여 적절한 처리가 필요합니다 {[quotes]}
. 더 완전한 예는 다음과 같습니다
#!/usr/bin/env expect
set prompt {\[USER@HOST[[:blank:]]+[^\]]+\]\$ }
spawn ssh USER@HOST
expect_before {
# TODO possibly with logging, or via `log_file` (see expect(1))
timeout { exit 1 }
eof { exit 1 }
}
# connect
expect {
# if get a prompt then public key auth probably logged us in
# so drop out of this block
-re $prompt {}
-ex "password:" {
send -- "Hunter2\r"
expect -re $prompt
}
# TODO handle other cases like fingerprint mismatch here...
}
# assuming the above got us to a prompt...
send -- "cd FIXMESOMEDIR\r"
expect {
# TWEAK error message may vary depending on shell (try
# both a not-exist dir and a chmod 000 dir)
-ex " cd: " { exit 1 }
-re $prompt {}
}
# assuming the above got us to a prompt and that the cd was
# properly checked for errors...
send -- "echo git pull FIXMEREMOVEDEBUGECHO\r"
expect -re $prompt
interact