파일 복사를 위한 스크립트가 필요합니다.

파일 복사를 위한 스크립트가 필요합니다.

내 로컬 컴퓨터의 일부 파일을 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

관련 정보