发布于 2013-07-24 14:20:23
另一种方法是使用lftp:
lftp sftp://user:password@host -e "put local-file.name; bye"
这种方法的缺点是,计算机上的其他用户可以从ps
等工具读取密码,并且密码可能成为您的shell历史记录的一部分。
从lftp4.5.0开始提供的一种更安全的替代方法是使用--env-password
设置LFTP_PASSWORD
环境变量并执行LFTP。下面是一个完整的示例:
LFTP_PASSWORD="just_an_example"
lftp --env-password sftp://user@host -e "put local-file.name; bye"
LFTP还包括一个很酷的镜像功能(可以包括在确认传输--Remove-source-files
后删除):
lftp -e 'mirror -R /local/log/path/ /remote/path/' --env-password -u user sftp.foo.com
发布于 2013-03-28 21:04:54
EXPECT
是一个很好用的程序。
在Ubuntu上,使用以下命令安装:
sudo apt-get install expect
在CentOS计算机上,使用以下命令进行安装:
yum install expect
假设您想要与sftp服务器建立连接,然后将本地文件从本地计算机上传到远程sftp服务器。
#!/usr/bin/expect
spawn sftp username@hostname.com
expect "password:"
send "yourpasswordhere\n"
expect "sftp>"
send "cd logdirectory\n"
expect "sftp>"
send "put /var/log/file.log\n"
expect "sftp>"
send "exit\n"
interact
这将使用您的密码打开到服务器的sftp连接。
然后转到您想要上传文件的目录,在本例中为"logdirectory“
这会将位于/var/ file.log /的本地目录中的日志文件上载到远程服务器上的"logdirectory“中
发布于 2013-07-30 06:27:34
您可以在shell脚本中以交互方式使用lftp,这样密码就不会保存在.bash_history或类似的文件中,方法如下:
vi test_script.sh
将以下内容添加到文件中:
#!/bin/sh
HOST=<yourhostname>
USER=<someusername>
PASSWD=<yourpasswd>
cd <base directory for your put file>
lftp<<END_SCRIPT
open sftp://$HOST
user $USER $PASSWD
put local-file.name
bye
END_SCRIPT
在编辑put文件的主机、用户、路径和目录后,编写/退出vi编辑器,键入:wq
.Then make your script executable chmod +x test_script.sh
并执行它./test_script.sh
。
https://stackoverflow.com/questions/5386482
复制相似问题