如何将 ssh-copy-id 与多跳 ssh 隧道一起使用?

如何将 ssh-copy-id 与多跳 ssh 隧道一起使用?

我想将~/.ssh/id_rsa.pub本地计算机上的文件中的公共 ssh 密钥复制到~/.ssh/authorized_keys两个 ssh 跃点之外的远程主机上的文件。换句话说,localhost只有 ssh 可以访问host1,但host1可以 ssh 访问host2。我想将我的公共 ssh 密钥从 复制localhosthost2

要将 ssh 密钥复制到一跳之外的远程主机,ssh 文档给出命令:

ssh-copy-id -i ~/.ssh/mykey user@host

有没有办法通过单个命令将密钥复制到两跳之外的机器?

答案1

您可以将任何ssh选项传递给ssh-copy-idwith-o选项。通过使用该ProxyJump选项,您可以ssh-copy-id通过跳转主机将密钥复制到主机。

下面是我通过跳转主机 Jump.spack.org 将 ssh 密钥复制到 leia.spack.org 的示例:

$ ssh-copy-id -o ProxyJump=jump.spack.org leia.spack.org
[email protected]'s password:

Number of key(s) added:        1

然后用以下方法测试它:

$ ssh -J jump.spack.org leia.spack.org
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-42-generic x86_64)

答案2

我认为 ssh-copy-id 不可能进行双跳。您可以使用 scp 将文件从一台服务器跳转到第三台服务器。看看男人scp。但您仍然需要做一些工作才能将文本放入authorized_keys并设置权限

然而!

您可以使用 ssh 从一台服务器跳转到另一台服务器,然后在那里发出命令。

像这样的东西会将密钥从这里复制到那里。您必须复制要发送的 .ssh/id_rsa.pub 密钥并粘贴到下面的 mysupersecretkeyfromhell 位置,并明显更改名称和 IP 地址。
与此类似的操作将跳过第一个服务器,通过 ssh 进入第二个服务器并运行您的命令。

ssh -J [email protected] [email protected] echo mySupersecretKeyfromehell >> .ssh/authorized_keys && chmod 700 .ssh && chmod 600 .ssh/authorized_keys

这假设您运行的是最新版本的 ssh。

您还可以通过将密钥放入变量中来缩短最后一个命令。
注意下面的反勾号不是单引号!

MYKEYVAR="echo `cat .ssh/id_rsa.pub`" 
ssh -J [email protected] [email protected] echo $MYKEYVAR >> .ssh/authorized_keys && chmod 700 .ssh && chmod 600 .ssh/authorized_keys

相关内容