过去,scp
(天真地)调用远程系统之间复制文件的工作方式非常不方便:例如,如果您编写
scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
scp
首先ssh
会在remote1上打开一个会话,然后scp
从那里运行到remote2。为此,您必须在remote1上为remote2设置授权凭证。
相反,现代的方法(“现代”是因为它是在几年前才实施的,也许并不是每个人都具有-3
-capable scp
)需要两个步骤。第一步是使用~/.ssh/config
来设置用于连接remote1和remote2的所有选项,如下所示:
Host remote1.example.org
Port 2222
IdentityFile /path/to/host1-id_rsa
Host remote2.example.org
Port 6969
IdentityFile /path/to/host2-id_rsa
这样就可以毫无歧义地将所有必要的选项传递给命令:例如,如果我们在CLI上说使用端口2222而不进行上述配置,则不清楚是要引用remote1还是remote2,并且对于包含加密密钥的文件也是如此。这样,CLI保持整洁和简单。
其次,使用该-3
选项,如下所示:
scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
该-3
选项指示scp
通过发出命令的PC路由流量,即使它是传输的第三方。这样,授权凭证必须仅驻留在发行PC上,即第三方。