首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Bash脚本中使用密码运行sftp命令?

如何在Bash脚本中使用密码运行sftp命令?
EN

Stack Overflow用户
提问于 2011-03-22 11:40:24
回答 6查看 774K关注 0票数 192

我需要从Linux主机使用sftp将日志文件传输到远程主机。我的运营组已经为我提供了相同的凭证。但是,由于我无法控制其他主机,因此无法生成RSA密钥并与其他主机共享。

那么,有没有办法通过cron作业从sftp脚本内部运行Bash命令(提供用户名/密码)呢?

我发现了一个类似的堆栈溢出问题,,但我的问题没有令人满意的答案。

EN

回答 6

Stack Overflow用户

发布于 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
票数 115
EN

Stack Overflow用户

发布于 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“中

票数 59
EN

Stack Overflow用户

发布于 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

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5386482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档