如何在多台机器上使用相同的 ssh 密钥?

Posted

技术标签:

【中文标题】如何在多台机器上使用相同的 ssh 密钥?【英文标题】:How do i use same ssh key across multiple machines? 【发布时间】:2020-09-13 04:20:04 【问题描述】:

我有一个私人 Github 存储库,我想使用相同的 ssh 密钥集从两台不同的 Linux 机器访问

对于第一台机器,我按照Github's instructions 生成 SSH 密钥,并将生成的公钥添加到 Github。这个客户端工作正常。 我在 GitHub gists 中上传了我的私钥和公钥,以便在第二个客户端上轻松获取它

在第二台机器上,我下载了私钥和公钥到必要的目录,并赋予了相关权限。

wget -O /root/.ssh/id_rsa.pub URL(RAW)
wget -O /root/.ssh/id_rsa URL(RAW)
chmod 700 /root/.ssh
chmod 600 /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa.pub

我认为这可能是我所要做的,但是当我尝试连接时,我收到以下错误

root@InstanceIDInHexa:~# ssh -T git@github.com                                 

The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is SHA256:RandomStringOfAlphaNumericCharacters.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,xxx.xxx.xxx.xxx' (RSA) to the list of known hosts.
Load key "/root/.ssh/id_rsa": invalid format
git@github.com: Permission denied (publickey).
root@InstanceIDInHexa:~#

我还检查了所有文件的内容和权限,看起来不错

cat /root/.ssh/id_rsa 
cat /root/.ssh/id_rsa.pub
stat -c "%a" /root/.ssh
stat -c "%a" /root/.ssh/id_rsa
stat -c "%a" /root/.ssh/id_rsa.pub

这里有什么我遗漏的吗?

【问题讨论】:

对于以后的问题,我建议您匿名化您的数据。将 SSH 指纹、IP 或实例 ID 留在问题中是没有意义的。 @Uberhumus 感谢您提出修改建议,我将始终确保它不会再次发生 不要共享私钥。如果你有两台机器,为每台机器生成一个单独的对,并将两个公钥推送到 GitHub。如果一个私钥被泄露,它不会影响另一个。 @chepner 我知道并且我已经测试过,如果我在我的第二台机器上生成一个新的对并将公钥添加到 github,它可以工作,但由于某种原因它不适合我这样做并且关于为多台机器使用同一组密钥的可能性,根据我在堆栈交换中看到的一些答案,这绝对是可能的 - 这是其中之一 - serverfault.com/a/170683 我怀疑wget 对行尾做了什么;它可能已经放弃了最后的\n 【参考方案1】:

首先,最佳做法是每台机器的每个用户都有一个密钥。这是最安全的方法,因为这意味着您可以独立于另一台机器移除对一台机器的访问权限,例如在一台机器丢失或被盗时。

不过,话虽如此,如果您真的想要这样做并且想要忽略最佳实践,您可以将 id_rsaid_rsa.pub 文件复制到另一台机器上,这应该工作。但是,在这种情况下,您在较旧的机器上使用不同的私钥格式或更现代的加密算法对其进行加密的较新机器上生成了密钥。较旧的 RSA 密钥的默认加密,即 PKCS #1 格式,往往有很多不足之处,而且不是很安全。

解决此问题的最简单、最简单的方法是生成一个新的 Ed25519 密钥对,因为它们始终使用 OpenSSH 格式,您可以使用 ssh-keygen -t ed25519 来做到这一点。如果你想复制它,文件是~/.ssh/id_ed25519~/.ssh/id_ed25519.pub。这也是当今最受青睐的密钥格式,但如果您使用的是 CentOS 6 等古老的东西,那么它可能不受支持。

如果您不想这样做,则可以使用ssh-keygen -issh-keygen -e 转换现有私钥,将您的私钥转换为适当的格式。这应该在较新的机器上完成,即生成密钥的机器。手册页记录了支持的选项和格式。您可以在该机器上使用file 找出私钥的格式。

【讨论】:

我刚刚试过这个。生成了 ed25519 的新密钥,将公钥粘贴到 GitHub 中,第一台机器一如既往地运行良好。在第二台机器中,我将这两个文件复制到具有正确权限的适当位置。但我仍然收到有问题的错误。加载密钥“/root/.ssh/id_ed25519”:格式无效 git@github.com:权限被拒绝(公钥)。

以上是关于如何在多台机器上使用相同的 ssh 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

CentOS系统多台机器免密互相可以登录

在两个不同的帐户上使用相同的公共 ssh 密钥

如何在带有 Tortoise git 的 Windows 上使用 linux 生成的密钥?

如何在 Windows 上通过 TortoiseGIT 应用 SSH 密钥个人访问 github?

集群中配置多台机器之间 SSH 免密码登录

SSH实现双向免密