如何为另一个用户生成SSH密钥?

3

我正在尝试使用另一个用户 username2 克隆到一个 Gerrit 服务器,但失败了,并出现 Permission denied (publickey)。我尝试根据 Server Fault 问题 "how do you create an ssh key for another user?" 的建议生成了一个 ssh 密钥。

以下步骤未能成功。我缺少了什么?

  • ssh-keygen -f ~/.ssh/username2
  • cp ~/.ssh/username2.pub ~/.ssh/authorized_keys
  • 将 username2.pub 添加到 tech-gerrit.sd.company.com
  • ~/.ssh/config
      Host tech-gerrit.sd.company.com
      HostName tech-gerrit.sd.company.com
      Port 29418
      User username2
      IdentityFile /Users/username1/.ssh/username2
    
  • 尝试使用以下命令进行克隆
    git clone ssh://username2@tech-gerrit.sd.company.com:29418
    
  • 以用户名 username2 登录 Gerrit 并将 username2.pub 添加到其中
3个回答

2
IdentityFile /Users/username1/.ssh/username2.pub

这可能不是你唯一的问题,但你很可能在这里指定了错误的文件。具有 .pub 扩展名的关键文件包含密钥的公共部分。相应的没有 .pub 的文件包含密钥的私有部分。 IdentityFile 指令期望私钥文件的名称,而不是公钥文件。尝试将此指令更改为:

IdentityFile /Users/username1/.ssh/username2
                                            ^-- note no ".pub"

并查看是否有更好的效果。


尝试过了,但是没有成功,我收到了错误信息 `username2@tech-gerrit.sd.company.com: Permission denied (publickey). fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists. `。 - Ritz
我说这可能不是你唯一的问题。 - Kenster

1
最好列出您使用的确切命令,这样我们也可以查找拼写错误,并知道您遵循问题323958中哪个答案。此外,了解在company.com上使用的软件和配置将会有所帮助。
一些尝试的方法:
- GitHub和GitLab设置使用“git”作为用户名。也许company.com也是这样做的。尝试在您的“git clone”命令中用“git”替换“username2”。 - 确保您使用Gerrit网站上指定的RSA密钥 - “ssh-keygen -t rsa -f ~/.ssh/username2” - “~/.ssh/config”中的“Host”行应与命令行中使用的名称匹配,如“Host tech-gerrit.sd.company.com”,否则git和ssh将根本不使用您在“~/.ssh/config”中的条目。 - 再次阅读Gerrit ssh documentation

我更新了我在问题中使用的命令,用git替换username2没有起作用,我正在尝试从gerrit服务器克隆。 - Ritz
@Flair - 感谢提供的详细信息。我假设第一个命令实际上是 ssh-keygen -f ~/.ssh/username2 - bitinerant
一个问题是,当运行 ssh-keygen -f ~/.ssh/username2 时,它会创建一个 SSH 密钥,但是当我打开 SSH 密钥时,它不是来自 username2,而是来自我登录到机器上的 username1,这是否是预期的行为? - Ritz
一个ssh密钥只是一个ssh密钥,它不属于任何人。公钥末尾的user@host是一条注释;ssh不使用它们。(然而,这些文件像Linux文件系统上的所有其他文件一样属于Linux用户。)我的其他建议中有没有解决你的问题? - bitinerant
@Flair - 或许这个答案可以解决你的问题:git在repo目录中进行fetch时出现'Permission denied'错误 - bitinerant
显示剩余2条评论

1
通常情况下,Git SCM被设计为使用git作为SSH克隆的用户。SCM中所有用户的公钥都会传播到该用户。因此,只要私钥与SCM中的公钥匹配,尝试克隆哪个用户都无关紧要。

您可以通过运行ssh git@tech-gerrit.sd.company.com:29418来检查密钥是否有效,这应该会打印一个问候语,称呼具有匹配私钥的用户。

例如:对于我在GitHub上

➜  ~ ssh -T git@github.com
Hi praveenprem! You've successfully authenticated, but GitHub does not provide shell access.

GitLab
➜  ~ ssh -T git@gitlab.com
Welcome to GitLab, @prav!
➜  ~

BitBucket(比特桶)
➜  ~ ssh -T git@bitbucket.org
logged in as pravd.

You can use git or hg to connect to Bitbucket. Shell access is disabled.
➜  ~

正如您所看到的,所有主流的SCM系统都使用相同的SSH用户,即git@

唯一需要使用用户名的情况是在通过HTTP / HTTPS克隆repo时。在这种情况下,通常使用username@

希望这可以帮助您。

还要记得将私钥加载到代理中。

运行ssh-add -l,如果您收到The agent has no identities.的消息,请尝试使用ssh-add添加密钥。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接