티스토리 뷰

Linux&Unix/Shell

SFTP 쉘 파일 전송확인

Reo Dongmin Lee 2018. 9. 10. 17:37

sftp shell을 작성할때 주의할점

  1. 수신서버에서 파일이 전송중인지 전송완료인지 판단하기 어려움
  2. 송신프로그램에서 현재 sftp가 수행중인지 혹은 타임아웃인지 판단하기 어려움.

1번의 경우는 sftp 파일전송이 끝나면 dummy 파일을 하나 더 보내서 수신서버에서 dummy 파일로 전송완료 여부 확인 가능.

2번의 경우 expect 스크립트를 사용하면 다음과 같이 전송상태가 100% 인지 확인 가능하고 timeout 경우도 잡아낼수 있음.

expect 스크립트의 default 타임아웃은 30초 이므로 용량이 큰 파일을 전송할때를 대비해서 타임아웃 시간 설정을 변경해준다.

예시에서는 timeout off (set timeout -1)

#!/usr/bin/expect -f
set timeout -1
set remote [lindex $argv 0]
set recvdir [lindex $argv 1]
set senddir [lindex $argv 2]
set sendfile [lindex $argv 3]
set endfile [lindex $argv 4]
set addr [exec printenv IP]
set user [exec printenv USER]
set pass [exec printenv PASS]
spawn $user@$addr
expect {
"yes/no" {
send "yes\r"
exp_continue
}
"password:" {
send "$pass\r"
}
default {
puts "Login failed\n"
exit
}
}
expect "sftp>" { send "cd $recvdir\r" }
expect "sftp>" { send "lcd $senddir\r" }
expect "sftp>" { send "put $sendfile\r" }
expect {
    "*100%*" { }
    timeout { exit 2 }
}
expect "sftp>" { send "put $endfile\r" }
expect {
    "*100%*" { }
    timeout { exit 2 }
}
expect "sftp>" { send "quit\r" }
expect "\r"



댓글