uwa*_*him 184 networking linux ssh shell scp
我有两个远程主机。
host1-> 10.3.0.1
host2-> 10.3.0.2
都运行 ssh 服务器。
ssh 服务器侦听 host1 中的端口 22 和 host2 中的端口 6969。现在,使用我的本地机器,我需要将某些内容从 host1 复制到 host2,而无需通过 ssh 登录到 host1 或 host2。就像是,
scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file
Run Code Online (Sandbox Code Playgroud)
我该怎么做,请注意两台主机对 ssh 使用不同的端口。
Mar*_*iae 290
过去,scp
当调用(天真地)在远程系统之间复制文件时,这种工作方式非常不方便:例如,如果您编写
scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这样就可以毫无歧义地将所有必要的选项传递给命令:例如,如果我们在没有上述配置的情况下在CLI 上说使用端口 2222,就不清楚我们指的是remote1还是remote2,并且对于包含加密密钥的文件也是如此。这样 CLI 保持整洁和简单。
其次,使用-3
选项,如下:
scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
Run Code Online (Sandbox Code Playgroud)
该-3
选项指示scp
通过发出命令的 PC 路由流量,即使它是传输的第 3 方。这样,授权凭证必须仅驻留在发布 PC 上,即第三方。
小智 31
源和目标可以指定为 scp://[user@]host[:port][/path] 形式的 URI
所以你可以运行:
scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file
Run Code Online (Sandbox Code Playgroud)
上次我尝试这样做时,scp 无法做到这一点。你的命令行看起来没问题。此解决方法将起作用:
ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我正在做一个远程到远程复制,没有-3
参数。'-P' 参数给出的端口适用于第一台服务器,但端口 22 用于第二台服务器。
ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com
Run Code Online (Sandbox Code Playgroud)
解决方案是编辑/etc/ssh/ssh_config
文件server1
并添加以下行:
Host *.otherdomain.com
Port 1234
Run Code Online (Sandbox Code Playgroud)
这样,1234端口就用于他们俩了。也可以不一样。
此解决方案比以前的解决方案具有更好的吞吐量,因为通信是直接的。
归档时间: |
|
查看次数: |
145490 次 |
最近记录: |