암호 인증을 사용하여 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
원격 및 로컬 디렉토리 구조가 혼란 스럽습니까? 서버에서 디렉토리를'd'로 바꾼 다음'./d/d1' 로컬 파일을 서버에 넣습니다. ** 로컬 **'./d' 디렉토리가 있습니까? –
실제로 예. 로컬 폴더 구조는 대상 서버와 동일합니다. 폴더 3 개 언어. (d, e 및 f) 동일한 구조가 연결되어있는 서버에 있습니다. 개발자의 요구 사항입니다. – schlattm
SSH 키를 사용할 수 있습니까? 그렇다면 전혀 기대할 필요가 없습니다. –