2014-10-13 1 views
0

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 

내가 무엇을 몰라 이 구성 요소의 누락 된 점

+0

디버그를 사용 설정하면 표시됩니다. 스크립트가 scp에 '예'를 보내고 있는지 여부 – Dinesh

+0

상단에'expect -xvf'를 시도하고 디버그/추적 출력이 있는지 확인하십시오. 그런 다음 전달 된 모든 변수와 그 실행을 확인해야합니다. 또한 chmod 755/scp.sh를 실행 했습니까? 스크립트가 실행 파일로 표시되어야 셸에서 실행할 수 있음을 알 수 있습니다. 행운을 빕니다. – shellter

답변

1

나는 scp가 특히 이런 종류의 일을하는 사람들을 막기 위해 만들어진 코드를 가지고 있다고 생각한다.

암호는 사람을위한 것입니다. 컴퓨터의 등가물은 "ssh 키"

ssh-keygen으로 ssh 키 (scp에 적합)를 만들고 scp -i <ssh-key-file>을 통해 사용할 수 있습니다.

서버의 공개 키를 ~/.ssh/authorized_keys에 추가해야합니다. 특정 키에 대해 실행 가능한 명령을이 파일에서 정확하게 제어 할 수 있으므로 보안이 향상됩니다.

https://wiki.archlinux.org/index.php/SSH_keys을 참조하십시오.이 페이지는 ArchLinux 용이지만 다른 Linux에서도 작동합니다.

관련 문제