SFTP使用bash脚本发送文件

时间:2012-07-31 16:14:07

标签: file bash send sftp

我正在使用密钥身份验证,因此密码不是问题。我有一个名字我知道的文件,我只想通过sftp将它发送到另一台机器。

我试过搜索但在任何地方都找不到这个(看似简单的)问题。也许我的谷歌今天只是让我失望。

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:38)

我知道这是一个旧的,但您也可以将参数传递给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

每个附加命令将被输入<<之前的命令,SOMEDELIMTER可以是您想要的任何命令。

scp是一个很好的选择,但是sftp是我从linux推送到Windows时能够工作的唯一工具,你在服务模式下使用FreeSSHD了!

答案 1 :(得分:11)

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

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

答案 2 :(得分:1)

询问此问题时,我不知道sftp是如何配置的。无论如何,六年后,您可以将sftp命令(例如PUT)放入文件中,然后在您的初始sftp调用中引用该文件。这样一来,整个过程就完全非交互且易于配置:

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

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

put test.txt; quit