2014-06-19 6 views
1

암호 인증을 사용하여 SFTP 액세스를 스크립팅해야합니다. 불행히도 고객은 액세스해야하는 서버에서 키 인증을 생성 할 수 없습니다.스크립팅 sftp with expect

모든 sftp-Commands가 생성되어 임시 파일 (tmp.txt)에 기록됩니다. 다음 명령은 명령 행에서 정상적으로 작동합니다.

스크립트를 작성하고 암호를 사용해야하기 때문에 "expect"를 사용하려고 할 때 문제가 발생합니다. 나는 "< tmp.txt"를 제거하면

EXPECTSCRIPT=`cat <<EOF 
    spawn sftp [email protected] < tmp.txt 
    expect "password" 
    send ${pass} 
    send "\r" 
EOF` 
expect -c "$EXPECTSCRIPT" 

연결이 설정됩니다. 하지만 tmp.txt의 명령이 필요합니다. 여기에 오류가 있습니다. 메시지 :

[[email protected] web]# ./transfer.sh 
spawn sftp [email protected] < tmp.txt 
usage: sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config] 
      [-o ssh_option] [-P sftp_server_path] [-R num_requests] 
      [-S program] [-s subsystem | sftp_server] host 
     sftp [[[email protected]]host[:file [file]]] 
     sftp [[[email protected]]host[:dir[/]]] 
     sftp -b batchfile [[email protected]]host 
send: spawn id exp6 not open 
    while executing 
"send password" 

누군가가 아이디어가 있습니까? @glenn의 잭맨에 대한

는 나는 또한 SFTP를 -b 실행되지 수

... :-(

편집

EXPECTSCRIPT2=`cat <<EOF 
     spawn sh -c {sftp [email protected] < tmp.txt} 
     expect "password" 
     send ${pass} 
     send "\r" 
     expect "sftp>" 
     expect "sftp>" 
     ..... 
     expect "sftp>" 
     expect "sftp>" 
     expect "sftp>" 
EOF` 

tmp.txt은 다음과 같습니다

cd d 
put d/d1 
cd ../e 
put e/e1 
put e/e2 
cd ../f 
put f/f1 
+0

원격 및 로컬 디렉토리 구조가 혼란 스럽습니까? 서버에서 디렉토리를'd'로 바꾼 다음'./d/d1' 로컬 파일을 서버에 넣습니다. ** 로컬 **'./d' 디렉토리가 있습니까? –

+0

실제로 예. 로컬 폴더 구조는 대상 서버와 동일합니다. 폴더 3 개 언어. (d, e 및 f) 동일한 구조가 연결되어있는 서버에 있습니다. 개발자의 요구 사항입니다. – schlattm

+0

SSH 키를 사용할 수 있습니까? 그렇다면 전혀 기대할 필요가 없습니다. –

답변

0

리디렉션 처리하는 쉘을 산란보십시오 :

spawn sh -c {sftp [email protected] < tmp.txt} 
+0

고마워요. 지금은 한 단계 더 나아졌지만 아직 작동하지 않습니다. sftp-server는 이제 ok입니다. 그러나 tmp.txt의 명령은 실행되지 않습니다. 어떤 생각이 있습니까? expectscript에 "expect"sftp>를 많이 넣으면 작동하지만 .. 정말 목표. 위의 편집에 대한 자세한 내용 .. (질문 있음) – schlattm