伏笔:server端是基于windows的server-u,启用了sftp,并不是标准的sftp,因此无法用ssh的key信任方式直接登录。为了节约人工,无奈之下,采用expect来解决问题。下面是例子:
#!/usr/bin/expect ## ## 用expect模拟sftp上传文件 ## created by yejr(imysql AT imysql.cn),2008/11/20 ## #取得传递参数,构造变量 set DT [lindex $argv 0] set NU [lindex $argv 1] set ftp_lcd "/dbbak/$DT/$NU" #查看本地文件 send "ls -la $ftp_lcd\r" #发送命令 send "cd $ftp_lcd\r" #发起sftp spawn sftp yejr@192.168.0.84 expect "yejr@192.168.0.84's password:" #发送密码 send "abccba" expect "sftp>" #设定lcd send "lcd $ftp_lcd\r" expect "sftp>" #上传文件,这里不知为何无法使用mput send "put $ftp_lcd/dbbak*$DT*.sql.gz.md5\r" expect "sftp>" send "put $ftp_lcd/dbbak*$DT*.sql.gz\r" expect "sftp>" #列文件,确认大小没问题 send "ls -la\r" expect "sftp>" #bye bye :) send "bye\r" interact
呵呵,有需要的朋友可以用上,顺便提出改进建议。
本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308849,如需转载请自行联系原作者