正如 OpenSSH 人员所说“scp 协议已经过时了”,是时候思考一下后 scp 时代了。
但是sftp
似乎设计为交互式操作。有没有好的方法使用sftp
像scp
? 这样的命令,如何在 ? 上执行此操作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 的最新版本类似scp
,pscp
它主要是 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 还具有您默认获得的其他优势(即,在替换旧文件时效率更高)。