이유를 말해주세요
spawn scp $FILE1 $FILE2 $LOGIN@$IP:/tmp
내 예상 스크립트에서는 FILE2가 아닌 FILE1만 복사합니까?
scp를 통해 두 개의 파일을 전송하려고 합니다.
scp file1.csv file2.crt 192.8.200.1:/tmp
놀랍게도 성공적으로 /tmp로 이동했습니다.
그렇다면 VIA는 왜 복사된 파일만 복사될 것으로 예상합니까?파일 1??
내 문법에 문제가 있는 걸까요?
내 예상 스크립트의 예:
#!/usr/bin/expect -f
set FILE1 file1.csv
set FILE2 file2.crt
set multiPrompt {[#>$]}
spawn scp $FILE1 $FILE2 $LOGIN@$IP:/tmp
expect {
")?" { send "yes\r" ; exp_continue }
word: {send $PASS\r}
}
나는 또한 이것을 시도합니다:
spawn scp "$FILE1 $FILE2" $LOGIN@$IP:/tmp
또는
spawn scp '$FILE1 $FILE2' $LOGIN@$IP:/tmp
하지만 나는 같은 문제에 직면했습니다.
답변1
expect
나는 이를 위해 다음 스크립트를 작성했고 (내 가상 머신에서) 작동합니다. 실행 예시:
./scp.exp <first host user> <first host user pass> <first host name> <second host name> <second host user> <second host user pass> <directory path i.e. /tmp>
스크립트:
#!/usr/bin/expect -f
# ./sshlogin.exp uptime
# set Variables
set user [lindex $argv 0];
set password [lindex $argv 1];
set host [lindex $argv 2];
set copy_to_host [lindex $argv 3];
set copy_to_host_user [lindex $argv 4];
set copy_to_host_pass [lindex $argv 5];
set copy_to_host_dir [lindex $argv 6];
set file1 one.txt;
set file2 two.txt;
set timeout 10
# now ssh
spawn ssh $user@$host -o StrictHostKeyChecking=no
match_max 100000 # Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
expect "*$ "
send -- "scp -o StrictHostKeyChecking=no $file1 $file2 $copy_to_host_user@$copy_to_host:$copy_to_host_dir\r"
expect "*?assword:*"
send -- "$copy_to_host_pass\r"
expect "*$ "
send -- "exit\r"
expect eof
expect
참고: 대용량 파일을 처리하는 경우 대기 시간을 추가해야 할 수도 있습니다.