
내 로컬 컴퓨터의 일부 파일을 SSH를 통해 액세스할 수 있는 다른 호스트로 이동/복사하려고 합니다. 하지만 안타깝게도 아래 스크립트는 작동하지 않습니다.
Are you sure you want to continue connecting (yes/no)?
이 스크립트를 실행하면 실행할 때마다 묻습니다.
ranfull
ranhalf
midran
내 로컬 컴퓨터에 scp 스크립트를 통해 다른 호스트로 전송/복사해야 하는 파일이 3개 있는데 첫 번째 파일만 복사됩니다.
설정할 수 없습니다 sshkeygen
.
#!/bin/bash
HOSTS="VM2 VM3 VM4 VM1"
read -p "Password: " PASSWORD
for HOST in $HOSTS
do
expect -c "
spawn /usr/bin/scp /tmp/ranfull ranhalf midran root@$HOST:/tmp/
expect {
"*password:*" { send $PASSWORD\r;interact }
}
exit
"
done
답변1
첫째, 인용문이 수상쩍습니다. 큰따옴표로 묶인 문자열 안에 큰따옴표가 있습니다. 이 문제를 해결하고 들여쓰기를 개선해 보겠습니다.
for HOST in $HOSTS; do
expect -c <<END_EXPECT
spawn /usr/bin/scp /tmp/ranfull ranhalf midran root@$HOST:/tmp/
expect {
"*password:*" {
send $PASSWORD\r
interact
}
}
exit
END_EXPECT
done
이제 표시되거나 표시되지 않을 수 있는 프롬프트를 수용하려면 다음을 수행하십시오.
expect {
"Are you sure you want to continue connecting*" {
send yes\r
exp_continue
}
"*password:*" {
send $PASSWORD\r
interact
}
}
exp_continue
기본적으로 예상 명령으로 다시 "루핑"하여 다른 "확실합니까..." 프롬프트 또는 비밀번호 프롬프트를 계속 감시할 수 있습니다.
답변2
-o StrictHostKeyChecking=아니요
#!/bin/bash HOSTS="VM2 VM3 VM4 VM1" read -p "Password: " PASSWORD for HOST in $HOSTS do expect -c " spawn /usr/bin/scp -o StrictHostKeyChecking=no /tmp/ranfull ranhalf midran root@$HOST:/tmp/ expect { "password:" { send $PASSWORD\r;interact } } exit " done