SFTP使用bash脚本发送文件

Bin*_*ing 16 bash sftp file send

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

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

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

sftp root@remote:/root/dropoff
put test.txt
quit
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Mik*_*hon 40

我知道这是一个旧的,但您也可以使用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
Run Code Online (Sandbox Code Playgroud)

每个附加命令都将被输入到前面的命令中,<<并且SOMEDELIMTER可以是您想要的任何命令.

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


jor*_*anm 11

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

scp test.txt root@remote:/root/dropoff
Run Code Online (Sandbox Code Playgroud)

  • 不适用于仅支持sftp的sftp服务器.错误"通道0上的exec请求失败" (11认同)

小智 8

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

sftp -i /path/to/ssh-key -b /path/to/sftp-commands.txt root@remote:/root/dropoff
Run Code Online (Sandbox Code Playgroud)

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

put test.txt; quit
Run Code Online (Sandbox Code Playgroud)