在两个使用不同.pem密钥的服务器之间使用SCP命令

5
我希望使用scp命令将一个文件夹从A服务器传输到B服务器,并且需要使用两个不同的.pem密钥。这是最好的方法吗?它是否可行?
scp -i ~/Documents/server1.pem -r root@server1.com:~/location/to/dir -i ~/Documents/server2.pem ~/location/to/copy/to

还是说我需要输入:

scp -i ~/Documents/server1.pem -r root@server1.com:~/location/to/dir -i ~/Documents/server2.pem root@server2.com:~/location/to/copy/to

我不确定第二个位置是需要输入主机名还是只需输入位置。

非常感谢您的帮助。

~/location/to/copy/to 是本地路径;你需要使用 root@server2.com: 前缀来指示远程目标。 - chepner
2个回答

4
创建一个类似于~/scp_config的配置文件:
Host src
    HostName server1.com
    User root
    CertificateFile %d/Documents/server1.pem

Host dest
    HostName server2.com
    User root
    CertificateFile %d/Documents/server2.pem

然后运行。
scp -3 -F ~/scp_config src:\~/location/to/dir dest:\~/location/to/copy/to

抱歉回复晚了,scp_config需要放在我的本地目录中,以便传输到我要传输的计算机,而不是A或B服务器。最亲切的问候。 - m33bo
它必须在您的本地计算机上某个位置,尽管您可以自由地将其放置在任何地方,因为您是使用“-F”选项直接指定路径。我的理解是,由于信息现在保存在本地文件中,而不是任何远程服务器上,所以您需要使用“-3”选项。 - chepner
证书文件 %d/ 是否必须替换为 ~,还是只是根目录? - m33bo
CertificateFile 是指令;%dsshconfig 中 shell 的 ~ 的等价物。 - chepner
3
“CertificateFile”指令对我不起作用,我不得不使用“IdentityFile”来代替它。 - Hubert Perron
显示剩余3条评论

2
首先,scp 只接受一个 -i 选项,所以你的命令都不会起作用。
其次,你没有使用 -3 选项。这意味着传输将直接在 server1 和 server2 之间进行,而不经过你的机器。在这种情况下,server1 需要存储 server2 的证书。
已经有一种解决方案在这里提供:这里。如果 server1 无法直接连接 server2,请参见 这里 中的 -3 选项。
另一种解决方案是使用两个 ssh 进程,每个进程都有自己的 -i 选项。类似这样的命令:
ssh -i ~/Documents/server1.pem root@server1.com 'tar cz -C ~/location/to/dir .' \
| ssh -i ~/Documents/server2.pem root@server2.com 'tar xz -C ~/location/to/copy/to'

注意事项:

  • 这种方式,文件会通过您自己的机器传输,就像scp-3选项一样
  • 您可能需要先创建目标目录(在tar x之前添加mkdir -p命令)
  • 您可能需要在tar x命令中使用--no-same-owner,以使文件的所有者为root,而不是它们原来的所有者

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接