머신 중 하나에 ssh를 연결해야 할 때 아래 명령이 나와 있으며 "yes"를 입력하면 제대로 작동하고 아래와 같이 로그인할 수 있습니다.
ssh [email protected]
The authenticity of host '192.168.1.177 (192.168.1.177)' can't be established.
ED25519 key fingerprint is SHA256:KqI6oKKY1JOH+OJZzCYObPdkMVNNwhkaMGTYgx/fDxE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.177' (ED25519) to the list of known hosts.
localhost ~ #
예상 스크립트를 통해 동일한 작업을 시도하고 있는데 아래와 같은 오류가 발생합니다.
./expectscriptssh.sh 192.168.1.177
spawn ssh [email protected]
invalid command name "fingerprint"
while executing
"fingerprint"
invoked from within
"expect "Are you sure you want to continue connecting (yes/no/[fingerprint])? ""
(file "./expectscriptssh.sh" line 4).
다음은 예상되는 스크립트입니다.
#!/usr/bin/expect -f
set VAR [lindex $argv 1]
spawn ssh root@$argv
expect "Are you sure you want to continue connecting (yes/no/[fingerprint])? "
send "yes\r"
누구든지 이 문제를 어떻게 해결할 수 있는지 제안할 수 있습니까?
답변1
TCL에서 [ ] 쌍은 POSIX 쉘의 $( )처럼 명령 대체를 수행하는 호출입니다.
사용 가능한 리소스가 있는 경우 autoexpect
Expect 스크립트를 작성하는 가장 쉬운 방법은 자동 기대를 사용하여 특정 작업을 수행하는 것을 관찰한 다음 결과 스크립트를 편집하여 원치 않는 콘텐츠를 제거하는 것입니다.
문자열 평가를 피하기 위해 "..."를 {...}로 변경할 수 있습니다.
#!/usr/bin/expect -f
set VAR [lindex $argv 1]
spawn ssh root@$argv
expect {Are you sure you want to continue connecting (yes/no/[fingerprint])? }
send "yes\r"
종종 당신은 더 많은 것을 원하고 프롬프트를 선택적으로 허용합니다.
#!/usr/bin/expect -f
set VAR [lindex $argv 1]
spawn ssh root@$argv
expect {
{Are you sure you want to continue connecting (yes/no/[fingerprint])? } {
exp_send "yes\r"
exp_continue
}
{Password:} {send "secret\r"}
{# }
}