在多台机器上使用相同的 SSH 私钥

在多台机器上使用相同的 SSH 私钥

我有一个 Github 仓库,想要从两台不同的 Linux 机器访问。

对于第一台机器,我遵循Github 的说明用于生成 SSH 密钥,并将生成的公钥添加到 Github。此客户端运行良好。

对于第二个客户端,我/home/{user}/.ssh/id_rsa从第一个客户端复制了文件。我以为这就是我要做的全部工作,但是当我尝试连接时,我收到“权限被拒绝(公钥)”。

我错过了什么?

答案1

同一个 SSH 密钥应该可以在多个客户端上使用。我为不同的网络设置了不同的 SSH 密钥,它们实际上存储在一个加密的 USB 驱动器上,我在几台不同的计算机上使用该驱动器,没有任何问题。

/home/{user}SSH 对文件权限非常挑剔,所以我会首先检查从头到尾直至文件本身的所有权限id_rsa

SSH 并不真正关心组或全局写入权限,因此请确保您chmod go-w的主目录和~/.ssh起始目录。我还要确保它们归您的用户所有chown ${USER}:${USER}

对于 SSH 密钥本身我chmod 600...

如果你需要的话,我还有更多关于如何在我的回答另一个 SSH 问题。

答案2

如果您从 Github 端收到权限拒绝,则可能是它没有选择您复制的 SSH 密钥文件,而是选择系统默认文件。解决此问题的简单方法是创建一个~/.ssh/config文件并将以下内容放入其中:

Host github.com
  Hostname      github.com
  User          git
  IdentityFile  ~/.ssh/yourkeyfile

这将强制您的 SSH 客户端仅将该密钥用于 github.com。

希望这可以帮助。

答案3

我知道这已经过时了,但我想指出的是,你还需要复制民众第二个客户端的密钥

(或者使用 ssh-keygen -y -f ~/.ssh/id_rsa_.. > ~/.ssh/id_rsa...pub 重新计算)

1

  1. 公钥认证方法:“publickey”

唯一必需的身份验证“方法名称”是“公钥”身份
验证。所有实现都必须支持此方法;
但是,并非所有用户都需要拥有公钥,并且大多数本地
政策在不久的将来不太可能要求所有用户都进行公钥身份验证

在这个方法中,拥有私钥就可以作为
身份验证。 此方法通过发送创建的签名来实现
使用用户的私钥。 服务器必须检查密钥是否
是用户的有效身份验证器,并且必须检查
签名是否有效。如果两者都成立,则必须
接受身份验证请求;否则,必须拒绝。请注意,服务器
在成功身份验证后可能需要进行其他身份验证。

您的 ssh 客户端通过将公钥(上面以粗体引用的签名)发送到服务器来开始身份验证。如果公钥是授权密钥,服务器会将随机会话 ID 发送回您的客户端。然后,您的客户端使用私钥对该会话 ID 进行编码并将其发送回服务器。服务器使用公钥解码该会话 ID,如果它与原始会话 ID 匹配,则对您的客户端进行身份验证。

https://www.openssh.com/txt/rfc4252.txt

答案4

可能是因为你没有在第二个客户端上复制文件的权限。
但是私钥是私人的,正确的做法是在第二个客户端上创建一个新的私钥,然后将其公钥添加到 Github

相关内容