为了结合sftp做自动上传,引用了lftp工具。

 #yum install lftp

安装完毕。。

lftp -u $USERNAME,$PASSWORD sftp://$HOST <<EOF
cd $SFTPBACKUP
put $BACKUP/$DataBakName
bye
EOF

按照上面的格式进行登录,居然报错了。

[root@just .ssh]# lftp -u qujun,qsc123 sftp://192.168.1.104

lftp qujun@192.168.1.104:~> ls

*** buffer overflow detected ***: lftp terminated

======= Backtrace: =========

/lib/libc.so.6(__fortify_fail+0x4d)[0xe3bf8d]

/lib/libc.so.6(+0xf6fca)[0xe39fca]

/lib/libc.so.6(+0xf66f8)[0xe396f8]

/lib/libc.so.6(_IO_default_xsputn+0x13c)[0xdb02cc]

/lib/libc.so.6(_IO_vfprintf+0x158f)[0xd833af]

/lib/libc.so.6(__vsprintf_chk+0xa7)[0xe397a7]


突出一个囧,写入了脚本再执行也有同样的错误,谷歌之貌似红帽论坛也没有人回答。。

正在考虑要不要放弃这种认证方式的时候,突然冒出一种更直接的方式:

使用-c参数

lftp -c 'get sftp://qujun:qsc123@192.168.1.104:22/c/users/qujun/1.txt'

居然成功了。。好吧,下一步就是测试crontab中的使用了,看到各大论坛的反馈貌似在定时任务中并不太好用,调试的路还很长啊。。


附录:lftp的使用方法(节选自枫芸志http://witmax.cn/linux-lftp.html)

lftp设置

lftp启动时执行~/.lftprc 和~/.lftp/rc。你可以在这两个文件中加入alias或set命令。如果你想看到完全的协议调试过程,可以使用debug来打开调试。

系统级的启动文件为/etc/lftp.conf。

lftp拥有众多设置项,可以通过set -a命令查看所有设置项及它们的值。

lftp命令选项

-d 切换到调试模式

-e commands 执行指定的命令,并且不退出

-p port 使用执行端口进行连接

-u user[,pass] 使用执行的用户名和密码进行连接

-f script_file 执行文件中的命令并且退出

-c commands 执行指定的命令并且退出

环境变量

以下环境变量将被lftp使用:

HOME 作为~的扩展

SHELL 在!命令时决定使用哪个shell来运行

PAGER 作为页面名称,在more和zmore命令中使用

http_proxy, https_proxy 作为初始时http:proxy, hftp:proxy, https:proxy的值

ftp_proxy 作为初始时ftp:proxy或hftp:proxy的值(由环境变量中的URL协议指定)

no_proxy 作为初始时的net:no-proxy值

LFTP_MODULE_PATH 作为初始时的module:path值

LFTP_HOME 用于定位用户配置文件的目录,如未设置将使用~/.lftp

相关文件

/etc/lftp.conf 系统级启动文件。实际位置由–sysconfdir配置项决定。

~/.lftp/rc, ~/.lftprc 这些文件在/etc/lftp.conf之后被执行。

~/.lftp/log 用于记录lftp运行于后台nohup模式时的日志。

~/.lftp/bookmarks 用户保存lftp中的书签。

~/.lftp/cwd_history 用于保存每个站点的当前工作目录。

~/.netrc 用于保存站点的用户名和密码。