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

那么,有没有一种方法可以通过cron作业从bash脚本内部运行sftp命令(提供用户名/密码)?

我发现了一个类似的堆栈溢出问题,在bash脚本中指定sftp的密码,但对于我的问题没有令人满意的答案。

除了使用公钥身份验证之外,您还有几个选项:

使用钥匙链

使用sshspass(安全性较低,但可能满足您的要求)

使用Expect(安全性最低,需要更多编码)

如果您决定给sshspass一个机会,这里有一个工作脚本片段:

export SSHPASS=your-password-here

sshpass -e sftp -oBatchMode=no -b - sftp-user@remote-host << !

cd incoming

put your-log-file.log

bye

!

用于Mac:stackoverflow.com/questions/9102557/&hellip;

嗨,我也有类似的问题,我尝试使用expect,因为主机上没有其他的替代方案。有了EDOCX1[0]我就得到了这个错误。Permission denied (publickey,keyboard-interactive).。请告诉我如何使用bash脚本中的passwd连接到sftp主机。

请看,我在这里问过这个问题。stackoverflow.com/q/12508206/1135954

我想不需要出口。SSHPASS=password sshpass -e ...应该这样做。

@詹斯:同意这里不需要出口。

我可以用一行程序加载一个日志文件:sshpass -p"my_password" sftp -oPort=9999 user@host:dir/file.log。

@Gorus:一行程序非常酷,但是我不想在命令行上使用密码,因为这样会增加窥探风险。

@德鲁:是的,export SSHPASS=your-password-here进入了该用户的env,但是ps -ef如何显示不同用户的env?

埃多克斯1〔7〕是我最重要的缺件。

这对我不起作用…

你用了什么没用。既然这是一条非常古老的线索,请随意创建一个新问题。

嗨,阿努巴瓦-这是我的问题。stackoverflow.com/questions/24540156/&hellip;

我正在IBMAIX上工作,并尝试使用sftp命令从远程服务器获取文件…

嗨,阿努巴瓦-你能帮我讲讲这个剧本吗?我试过用,但没用。这是我在下面的链接中编写的代码。stackoverflow.com/questions/24540156/&hellip;

嗨,阿努巴瓦-运气好吗?

嗨,阿努巴瓦-我试过这三种方法,但没有一种对我有用……你能帮我一下吗?谢谢您。。。

在尝试sshpass命令时出现了什么错误?我每天都在我的系统上使用它。

sshspass:找不到命令-我找不到它

我在那台机器上没有安装新软件的根用户。我正在寻找一种不安装新软件的方法

我在没有根访问的情况下安装了它,但是讨论这将使这个问题偏离太多。

嗨,sshspass是个好主意,谢谢,工作得很好!但现在,每次通过crontab运行时,我都会收到一封邮件,其中包含这里脚本区域中的所有sftp命令。那么,有人知道如何抑制这个输出到控制台吗?

可以添加> ~/file.out 2>&1将输出和stderr重定向到文件。

@阿努巴瓦,谢谢,这个很好用!

@阿努巴瓦非常感谢你的回答。我将它与我的bash脚本文件一起使用,该文件是通过crontab-e启动的。我更改了感叹号"!"到"eof",因为crontab无法在脚本中识别此字符

另一种方法是使用LFTP:

lftp sftp://user:password@host  -e"put local-file.name; bye"

这种方法的缺点是,计算机上的其他用户可以从诸如ps之类的工具中读取密码,并且密码可以成为shell历史的一部分。

由于LFTP 4.5.0设置了LFTP_PASSWORD环境变量,并使用--env-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

+1用于建议替代方案,但我们是否可以避免在命令行上提供密码?

拒绝向同一台计算机上的任何人显示密码

您可以为lftp创建脚本文件,这样就不必在命令行中提供密码。创建一个文件put-script:open sftp://user:password@host; put local-file.name; exit,然后运行lftp -f put-script,这样就不必在命令行中使用用户名和密码,并且可以设置对脚本文件的限制权限。

@这是个好主意。我想知道是否要将它作为别名或函数添加到我的环境变量中,是否安全并可以对其他用户隐藏它?

做lftp要比和sftp和sshpass混在一起容易得多。好答案。

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

"

expect"sftp>"

send"cd logdirectory

"

expect"sftp>"

send"put /var/log/file.log

"

expect"sftp>"

send"exit

"

interact

这将使用您的服务器密码打开一个SFTP连接。

然后它会转到要上载文件的目录,在本例中是"logdirectory"

这会将一个日志文件从/var/log/中找到的本地目录上载到远程服务器上的"log directory",文件名为file.log。

谢谢你的回答,我希望这是我完成这项任务的一个选择。

谢谢您。我通过搜索找到了你的答案,使用它并成功地用Expect构建了一个脚本。刚刚发布了关于权力的剧本

非常感谢你的回答,我已经投了反对票:)

这对我来说毫无瑕疵。谢谢您!

我用这个输入ssh私钥的密码。在所有服务器上放置相同的公钥并定期旋转私钥密码短语更容易。

您可以在shell脚本中交互使用lftp,这样密码就不会保存在.bash_历史记录或类似文件中,方法是执行以下操作:

vi test_script.sh

将以下内容添加到文件中:

#!/bin/sh

HOST=

USER=

PASSWD=

cd

lftp<

open sftp://$HOST

user $USER $PASSWD

put local-file.name

bye

END_SCRIPT

在编辑输入:wq的put文件的主机、用户、pass和目录后,编写/退出vi编辑器,然后使脚本可执行chmod +x test_script.sh并执行./test_script.sh。

要覆盖现有文件,请在lftp<

您可以通过启用无密码身份验证进行覆盖。但你应该先安装密钥(pub,priv),然后再进行安装。

在本地服务器上执行以下命令。

Local $> ssh-keygen -t rsa

按Enter键显示提示的所有选项。不需要键入任何值。

Local $> cd .ssh

Local $> scp .ssh/id_rsa.pub user@targetmachine:

Prompts for pwd$>  ENTERPASSWORD

使用以下命令连接到远程服务器

Local $> ssh user@targetmachine

Prompts for pwd$> ENTERPASSWORD

在远程服务器上执行以下命令

Remote $> mkdir .ssh

Remote $> chmod 700 .ssh

Remote $> cat id_rsa.pub >> .ssh/authorized_keys

Remote $> chmod 600 .ssh/authorized_keys

Remote $> exit

在本地服务器上执行以下命令以测试无密码身份验证。它应该在没有密码的情况下连接。

$> ssh user@targetmachine

+1问你的答案,但问题是在没有公钥/私钥的情况下进行。

哎呀。。刚刚看到密钥共享的限制:)

出于好奇,当从shell脚本调用时,这个命令lftp -p ${port} -u ${login_id},${password} ${ip_number}会在哪里打印它们?除了sshspass,你是怎么解决的?

我没有lftp,并且同时依赖Mac和Linux的sshpass。

纯金。谢谢!:)

提示:如果要为其他远程服务器设置此设置,请将相同的id_rsa.pub复制到远程服务器。公钥id_rsa.pub在本地服务器上生成一次,并与需要设置无密码身份验证的所有远程主机共享。

我最近被要求从ftp切换到sftp,以确保服务器之间的文件传输安全。我们使用的是tectia ssh包,它有一个选项--password来在命令行上传递密码。

示例:sftp --password="password""userid"@"servername"。

成批实例:

(

echo"

ascii

cd pub

lcd dir_name

put filename

close

quit

"

) | sftp --password="password""userid"@"servername"

我想我应该分享这些信息,因为在运行帮助命令(sftp -h之前,我查看了各种网站,我很惊讶地看到了密码选项。

+给你一个好建议。但是,这将要求您在命令行上传递密码,系统中执行ps命令的任何人都可以看到您的密码。

我试过了,我找到了EDOCX1[0]

@我可能是因为你需要techia ssh,而不是openssh

将sshspass与一个锁定的凭证文件结合起来,实际上,它的安全性与任何东西都一样——如果您在框中有根来读取凭证文件,那么所有的赌注都将关闭。

您可以使用sshspass。以下是步骤

为Ubuntu-sudo apt-get install sshpass安装sshass

如果是第一次,请将远程IP添加到已知主机文件中对于Ubuntu->ssh user@ip->enter'yes'

为它发出scp和sshspass的组合命令。下面是一个针对远程Tomcat的战争应对示例代码sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps

bash程序等待sftp请求密码,然后发送:

#!/bin/bash

expect -c"

spawn sftp username@your_host

expect "Password"

send "your_password_here

"

interact"

您可能需要安装expect,将"password"的措辞更改为小写"p",以匹配您收到的提示。这里的问题是,它在文件和命令历史记录中以纯文本的形式公开您的密码。这几乎破坏了最初拥有密码的目的。

+1但我认为你清楚地说明了这种方法的问题所在。

linux sftp账号密码脚本传文件,关于shell:如何使用Bash脚本中的密码运行sftp命令?...相关推荐

  1. 使用hbuilder前端工具直接连接服务器FTP/SFTP连接传输上传文件

    hbuilder前端工具直接连接FTP/SFTP连接传输上传文件#优点# 1>不需要冗余的下载ftp工具 *第一步* 1>hbuilder插件市场安装SFTP/FTP Sync 2> ...

  2. linux通过ftp自动上传文件到服务器,Linux系统通过FTP上传文件到云服务器

    如何通过FTP将文件上传到腾讯云Linux云服务器?上一篇小编给大家介绍了通过Winscp将文件上传到云服务器的方法,今天小编为大家介绍过FTP将文件上传到腾讯云Linux云服务器的方法,用户需要使用 ...

  3. Linux系统如何连接和上传文件到服务器上

    Linux系统如何连接和上传文件到服务器上(图形化界面) 一.Linux连接服务器 1.安装rdesktop sudo apt-get intall rdesktop 2.使用rdesktop指令打开 ...

  4. python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...

    Python已经成为全球最受欢迎的编程语言之一.原因当然是Python简明易用的脚本语法,只需把一段程序放入.py文件中,就能快速运行. 而且Python语言很容易上手模块.比如你编写了一个模块my_ ...

  5. linux非root上传文件,root账号无法上传文件到Linux服务器

    普通权限的账号,通过ftp工具,可以正常连上Linux服务器,可以正常上传文件.但是root账号却无法上传文件. 网上搜了半天才知道,默认情况下vsftp是不允许root用户登录的,可以通过修改限制来 ...

  6. windows securecrt下文件复制到linux,SecureCRT在linux与windows本地互传文件

    SecureCRT与SshClient不同的就是,SecureCRT没有图形化的文件传输工具,不过也不影响,用命令来实现的话,其实会方便快捷很多. 第一种方式: 上传文件只需在shell终端仿真器中输 ...

  7. linux和Windows之间互传文件

    几种比较简单的方法 1.xshell 安装lrzsz  #yum -y install lrzsz windows 传给linux   输入 rz  然后选择目标文件 linux 传给 Windows ...

  8. Linux 系统通过 FTP 上传文件到云服务器

    连接云服务器 执行以下命令,安装 ftp. 说明 若 Linux 系统的本地机器已安装了 ftp,请跳过此步骤,执行下一步. yum -y install ftp 执行以下命令,在本地机器上连接云服务 ...

  9. 简单两个命令快速使用Xshell从Linux服务器上下载上传文件

    场景 WIndows电脑上操作Linux服务器,如果需要上传下载文件,通常会借助 Xsheel这个工具. Xshell下载: https://download.csdn.net/download/ba ...

最新文章

  1. [HTTP协议]入门篇
  2. SDUT-3362 数据结构实验之图论六:村村通公路
  3. cheat sheet for cs221 at stanford: good luck
  4. 《乐在C语言》一2.2 数据类型
  5. 谈CRM产品设计的指导思想
  6. 关系型数据库的核心单元是_核中的数据关系
  7. 仅剩296个免费名额,AI工程师进阶必修课今日领取
  8. Webview中无法触发手势方法(ontouchevent,onfling...)的解决方法
  9. HTML表单input里面的value的作用
  10. 断网重启路由器就好_每天都要重启路由器?难怪WIFI越用越慢,宽带师傅透露其中窍门...
  11. iOS底层探索之多线程(八)—GCD源码分析(函数的同步性、异步性、单例)
  12. 51单片机编程软件keil4的安装过程
  13. 手把手教你用SPSS做出二元logistic回归分析
  14. thinkpadt410接口介绍_Thinkpad-T410 T410S笔记本左右接口以及硬件设备详细介绍!
  15. oracle排列组合,Oracle SQL排列组合之排列问题
  16. mysql-8.0.16-winx64的最新安装教程
  17. DCT和IDCT原始公式计算
  18. 附表和附注_现金流量表附注怎么填?现金流量表附表的编制
  19. 浏览器能上网,qq,百度云不能上
  20. 解决台式机前耳机插孔没有声音

热门文章

  1. 滴滴出行商业模式分析
  2. JAVA峨眉山景点介绍及旅游攻略推荐平台计算机毕业设计Mybatis+系统+数据库+调试部署
  3. b社服务器稳定吗,B社向玩家道歉 《辐射76》将会在12月推出两次大补
  4. 灰度上线实践之zuul网关流量分配
  5. 【STM32】解决引脚复用成PWM开漏输出峰值达不到外部上拉的电压
  6. 计算机考研大三上准备什么,2020计算机考研:前期复习有三大事项要注意!
  7. linux poll cpu过高,CPU占用过高问题排查
  8. 实车部署采用速腾聚创RS16激光雷达的LeGo-LOAM
  9. 【嵌入式】AMIC和DMIC(什么是数字麦和模拟麦)
  10. 一款开源OA办公自动化系统