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

Yar*_*rin 38 linux ssh github

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

对于第一台机器,我按照Github 的说明生成 SSH 密钥,并将生成的公钥添加到 Github。这个客户端工作正常。

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

我错过了什么?

Jer*_*use 44

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

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

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

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

如果您愿意,我在另一个 SSH 问题的回答中提供了有关如何管理 SSH 密钥的其他信息。


vmf*_*rms 9

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

Host github.com
  Hostname      github.com
  User          git
  IdentityFile  ~/.ssh/yourkeyfile
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助。


小智 5

我知道这是老了,但认为我会指出你还需要将复制公开密钥到第二客户端

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

来自 [1]:

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

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

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

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

[1] [ http://www.openssh.org/txt/rfc4252.txt][1]