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


23

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

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

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

我想念什么?

Answers:


32

可以从多个客户端使用相同的SSH密钥。我为不同的网络使用了不同的SSH密钥,它们实际上存储在一个加密的USB驱动器中,我可以在几台不同的计算机上使用它们而不会出现问题。

SSH对文件权限非常挑剔,因此我将首先检查所有权限,/home/{user}直至id_rsa文件本身。

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

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

如果您愿意,可以在回答另一个SSH问题时获得有关如何管理SSH密钥的其他信息。


3
这是权限-没有代表进行投票,但非常感谢
Yarin

6

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

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

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

希望这可以帮助。


2
没有代表支持投票,但谢谢
Yarin

1

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

(或使用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]


0

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


我打算在每个用户的多个客户端上为每个用户做1个密钥对。但是在我看来,每个用户的每个客户的密钥对似乎都将一发不可收拾...?
Yarin 2010年

如果对每台计算机上的每个用户使用相同的私钥,则似乎可以。只要检查权限(如果您使用带有-p标志的scp复制就可以了)
半径
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.