Bir iş için SFTP bir web sitesinden firmaddmmyy.firmaadi formatında dosya indirilmesi ve bunun rutin olarak yapılması istendi. FTP olsa kolaydı, bir shell scripti içinde alt alta komutları sıralayınca basitçe halledebilirdik ancak site yalnızca SFTP destekleyince işler karıştı.
SFTP ile yine argümanları sırasıyla ve ayrı ayrı göndermek mümkün ama iş kullanıcı adından sonra şifre göndermeye gelince SFTP mızıkçılık yapıyor. İzin vermiyor yani.
Bu durumda araya bir ‘şey’in girip bu tür girdi bekleyen komutlara istediği cevabı göndermesi ve bunu da yine bir ‘yığın’ mantığıyla yapması gerekiyor. Gözüken buydu.
İşte burada ‘expect’ devreye giriyor. TCL diliyle entegre olan bu uygulama, bu tür ihtiyaçları karşılamak için birebir. Ancak Solaris için expect’i Sunfreeware.com’dan indirmek çok zahmetli. Bağımlılıklar can sıkıyor. OpenCSW’den indirmek daha kolay.
Expect’in detaylarına girecek değilim ama basit bir örnekle anlatmakta fayda görüyorum.
#!/opt/csw/bin/expect -f
# Asagidaki DOSYA_ADI degiskeni, sistem icinde tanimlaniyor. Olmadan calismayacaktir.
set timeout -1
spawn /usr/bin/sftp mahmure@veri.com
expect “password”
send “123456\r”
expect “sftp”
send “cd mahmure\r”
expect “sftp”
send “ls -l\r”
expect “sftp”
send “lcd /data/ftp/mahmure_local\r”
expect “sftp”
send “get $env(DOSYA_ADI)\r”
expect “sftp”
Dosya adını da aşağıdaki şekilde formatladım.
export DOSYA_ADI=DOSYA`date ‘+%d%m%y’`.VERI
Aşağıda da bu konu hakkındaki enteresan linkler bulunuyor.
Automating sftp with expect script
http://jibbysununix.blogspot.com/2010/01/automating-sftp-with-expect-script.html
Scripting the OpenSSH, SFTP
http://www.scottklement.com/presentations/Setting%20up%20and%20Scripting%20the%20OpenSSH,%20SFTP%20and%20SCP%20Utilities%20on%20IBM%20i.pdf
http://www.admin-hints.com/2009/05/sftp-bash-script-with-expect.html
Automating SFTP using expect
http://www.linux-bsd-central.com/index.php/content/view/26/
http://www.stratigery.com/scripting.ftp.html