我有一个 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:
- 公钥认证方法:“publickey”
唯一必需的身份验证“方法名称”是“公钥”身份
验证。所有实现都必须支持此方法;
但是,并非所有用户都需要拥有公钥,并且大多数本地
政策在不久的将来不太可能要求所有用户都进行公钥身份验证
。在这个方法中,拥有私钥就可以作为
身份验证。 此方法通过发送创建的签名来实现
使用用户的私钥。 服务器必须检查密钥是否
是用户的有效身份验证器,并且必须检查
签名是否有效。如果两者都成立,则必须
接受身份验证请求;否则,必须拒绝。请注意,服务器
在成功身份验证后可能需要进行其他身份验证。
您的 ssh 客户端通过将公钥(上面以粗体引用的签名)发送到服务器来开始身份验证。如果公钥是授权密钥,服务器会将随机会话 ID 发送回您的客户端。然后,您的客户端使用私钥对该会话 ID 进行编码并将其发送回服务器。服务器使用公钥解码该会话 ID,如果它与原始会话 ID 匹配,则对您的客户端进行身份验证。
答案4
可能是因为你没有在第二个客户端上复制文件的权限。
但是私钥是私人的,正确的做法是在第二个客户端上创建一个新的私钥,然后将其公钥添加到 Github