SFTP 使用 bash 脚本发送文件

Posted

技术标签:

【中文标题】SFTP 使用 bash 脚本发送文件【英文标题】:SFTP to send file with bash script 【发布时间】:2012-07-29 11:33:18 【问题描述】:

我使用的是密钥认证,所以密码不是问题。我有一个我知道名称的文件,我只是想通过 sftp 将它发送到另一台机器。

我尝试搜索,但在任何地方都找不到这个(看似简单的)问题。也许我的 Google-fu 今天让我失望了。

简而言之:我在本地机器上,想将文件 (test.txt) 发送到远程机器。已提供授权密钥。基本上我想自动化这三个步骤:

sftp root@remote:/root/dropoff
put test.txt
quit

是否有一个简单的 bash 命令可以用来自动执行此操作?我见过的唯一选择是使用 bash 脚本来执行 put/quit 并使用 -b 选项来运行它。还有比这更干净的吗? (我对使用任何其他应用程序/工具不感兴趣。)

谢谢!

【问题讨论】:

【参考方案1】:

我知道这是一个旧的,但您也可以使用 Here Document 将参数传递给命令

您可以将以下内容放入脚本中:

# The following is called a HERE document
sftp <user>@<remote> << SOMEDELIMITER 
  put test.txt
  ... # any commands you need to execute via sftp
  quit
SOMEDELIMITER

每个附加命令都将输入到&lt;&lt;SOMEDELIMTER 之前的命令中,可以是任何你想要的。

scp 是一个不错的选择,但是 sftp 是我在从 linux 推送到 windows 时能够使用的唯一工具,而您在服务模式下使用 FreeSSHD 时卡住了!

【讨论】:

我试过\或\\作为SOMEDELIMTER,它不起作用,使用@就可以了【参考方案2】:

您说您对其他工具不感兴趣,但scp 是无人值守文件传输的更好选择。这是一个 scp 示例:

scp test.txt root@remote:/root/dropoff

【讨论】:

不适用于仅支持 sftp 的 sftp 服务器。错误“通道 0 上的执行请求失败” SCP 是一种不同的协议,并非在所有情况下都可用。因此,在仅 SFTP 的服务器上,您将收到错误 This service allows sftp connections only.【参考方案3】:

当被问到这个问题时,我不知道如何配置 sftp。无论如何,6 年后,您可以将像 PUT 这样的 sftp 命令放入一个文件中,然后在您的初始 sftp 调用中引用该文件。这使得整个过程完全非交互且易于配置:

sftp -i /path/to/ssh-key -b /path/to/sftp-commands.txt root@remote:/root/dropoff

....其中 sftp-commands.txt 仅包含

put test.txt; quit

【讨论】:

以上是关于SFTP 使用 bash 脚本发送文件的主要内容,如果未能解决你的问题,请参考以下文章

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

想要使用 c++ 或 perl 使用 OpenSSH 和 SFTP 通过 Internet 发送文件---Windows Vista 两者

如何使用 mail 或 mailx 命令从 bash 脚本以 HTML 格式发送电子邮件(Centos/Redhat)

如何从bash脚本加密zip文件

SFTP应用

Bash:将数据文件逐行发送到C程序中