17

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

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

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

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

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

谢谢!

4

3 回答 3

44

我知道这是一个旧的,但您也可以使用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 时被卡住了!

于 2013-07-12T22:51:59.203 回答
11

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

scp test.txt root@remote:/root/dropoff
于 2012-07-31T16:26:17.847 回答
4

当被问到这个问题时,我不知道 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
于 2018-08-10T13:12:18.843 回答