SCP + EXPECT를 사용하여 각 시스템에 파일을 보내고 각 연결에 대한 자동 암호 프롬프트를 보내려고합니다.expect 스크립트를 사용하여 scp를 통해 원격 호스트에 로그인
나는 (1) 텍스트 파일에 사용자 이름, 암호, IP 및 경로가 포함되어 있습니다. (2) 텍스트 판독기는 텍스트 파일에서 정보를 읽고이 값을 SCP 파일에 전달합니다. (3) SCP 파일.
이 구성 요소는 제대로 작동하지만 실행하면 암호 프롬프트가 계속 표시됩니다. 나는 이미 수동으로 SCP 파일의 값 설정을 시도했지만 작동했지만 값을 전달할 수는 없었다.
텍스트 파일은 텍스트 리더 스크립트가
#!/bin/bash
cat list.txt | while read line
do
IPADDR=$(echo $line | awk -F',' '{print $1}');
US=$(echo $line | awk -F',' '{print $2}');
PW=$(echo $line | awk -F',' '{print $3}');
dir_path=$(echo $line | awk -F',' '{print $4}');
./scp.sh "${IPADDR}" "${US}" "${PW}" "${dir_path}"
done
입니다
xxx.xxx.xxx.xxx,user,password,/path/to/directory
같은 여러 줄의 텍스트를 포함하고 SCP 파일
#!/usr/bin/expect -f
log_user 1
exp_internal 0
set timeout 30
set HOST [lindex $argv 0]
set US [lindex $argv 1]
set PW [lindex $argv 2]
set DIR [lindex $argv 3]
#connect via scp
spawn scp -r "${US}@{HOST}:/home/test/send_file" ${DIR}/moved_file
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "${PW}\r"
}
}
interact
내가 무엇을 몰라 이 구성 요소의 누락 된 점
디버그를 사용 설정하면 표시됩니다. 스크립트가 scp에 '예'를 보내고 있는지 여부 – Dinesh
상단에'expect -xvf'를 시도하고 디버그/추적 출력이 있는지 확인하십시오. 그런 다음 전달 된 모든 변수와 그 실행을 확인해야합니다. 또한 chmod 755/scp.sh를 실행 했습니까? 스크립트가 실행 파일로 표시되어야 셸에서 실행할 수 있음을 알 수 있습니다. 행운을 빕니다. – shellter