如何将数据通过管道传输到 sftp 连接?

JMW*_*JMW 12 ssh sftp pipe

ftp 支持将put "|..." "remote-file.name"数据通过管道传输到 ftp 连接的命令。sftp 有类似的东西吗?

在 sftp 中,我收到以下错误:

sftp 'jmw@backupsrv:/uploads'
sftp> put "| tar -cx /storage" "backup-2012-06-19--17-51.tgz"
stat | tar -cv /storage: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如上所述,sftp 客户端显然没有执行命令。

我想使用管道命令直接将文件流重定向到 sftp。(因为在将其上传到 sftp 服务器之前,没有足够的空间在同一磁盘上创建备份文件。)

小智 5

由于这是您通过谷歌搜索此问题找到的第一个结果,并且尚未提及,因此我还将添加我在此处找到的解决方案:

您可以为此使用 curls sftp 实现。由于 curl 可能已经安装在许多系统上,因此这可能比使用自定义客户端的解决方案更受欢迎。

用法示例:

pg_dump -d database | pigz -1 | curl -u username -T - sftp://sftpserver/folder/dbbackup.sql.gz
Run Code Online (Sandbox Code Playgroud)

curl使用您的.ssh/known_hosts文件进行密钥验证。如果您的 ssh 客户端确实使用了 curl 中使用的库不支持的较新的加密标准,这可能会失败

要解决此问题,您可以使用以下命令将其他密钥类型添加到已知主机文件中:

ssh-keyscan sftpserver >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

或者您可以使用该-k标志禁用密钥验证(不过我不建议这样做)