像 scp 一样使用 sftp

像 scp 一样使用 sftp

正如 OpenSSH 人员所说“scp 协议已经过时了”,是时候思考一下后 scp 时代了。

但是sftp似乎设计为交互式操作。有没有好的方法使用sftpscp? 这样的命令,如何在 ? 上执行此操作sftp

scp ./myfile myserver:/home/myfile

或者,有哪位优秀的scp继任者?

答案1

从 OpenSSH 8.7 开始,scp可以使用 SFTP 协议。只需添加-s开关:

scp -s ./myfile myserver:/home/myfile

自从OpenSSH 9.0scp默认使用 SFTP 。


sftp命令确实是围绕命令构建的(如ftp)。因此它不能作为的替代scp

尽管您可以使用如下的单行代码:

echo get /remote/path/file.txt /local/path.txt | sftp [email protected]

或者

echo put /local/path.txt /remote/path/file.txt | sftp [email protected]

您可能需要添加-b -以强制非交互模式。


有趣的是(正如@Kamil 提到的),对于下载,您还可以使用scp类似这样的语法:

sftp [email protected]:/remote/path/file.txt /local/path.txt

(第二个参数的使用没有记录)。

从 OpenSSH 7.7 开始也可以使用sftp://前缀,它在一定程度上修改了语法(允许对用户名和路径进行 URL 编码)。


还有免费/开源pscp命令行客户端PuTTY 软件包中包含此工具,可用于 Linux(而在 Windows 上更常用)。它具有完全相同的OpenSSH 的命令行界面scp。与 OpenSSH 的最新版本类似scppscp它主要是 SFTP 客户端(如果服务器不支持 SFTP,它可以回退到 SCP)。

尽管有这样的名字,PSCP(像许多其他表面上的 scp 客户端一样)可以使用其中任何一种协议。

...

通常,PSCP 会尝试使用 SFTP 协议,并且仅当服务器上没有 SFTP 时才会回退到 SCP 协议。

您可以使用以下命令安装 PuTTY/pscp apt-get

sudo apt-get install -y putty

Stack Overflow 上也有类似的问题: 来自终端的单行 sftp

答案2

您还应该考虑 rsync。除了 scp 允许的从 remote1 到 remote2 的传输之外,从快速阅读来看man scp,似乎您可以让 rsync 非常轻松地完成所有这些操作,或者编写一个不太轻松的包装器。

即使您不使用它的任何选项,Rsync 还具有您默认获得的其他优势(即,在替换旧文件时效率更高)。

相关内容