我想将~/.ssh/id_rsa.pub
本地计算机上的文件中的公共 ssh 密钥复制到~/.ssh/authorized_keys
两个 ssh 跃点之外的远程主机上的文件。换句话说,localhost
只有 ssh 可以访问host1
,但host1
可以 ssh 访问host2
。我想将我的公共 ssh 密钥从 复制localhost
到host2
。
要将 ssh 密钥复制到一跳之外的远程主机,ssh 文档给出命令:
ssh-copy-id -i ~/.ssh/mykey user@host
有没有办法通过单个命令将密钥复制到两跳之外的机器?
答案1
您可以将任何ssh
选项传递给ssh-copy-id
with-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