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

时间:2018-11-10 06:46:07

标签: ssh gerrit ssh-keygen

我正在尝试使用另一个用户username2克隆到gerrit服务器,但是它失败并显示Permission denied (publickey)。我尝试遵循Server Fault question "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 个答案:

答案 0 :(得分:2)

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

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

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

看看情况是否更好。

答案 1 :(得分:1)

最好列出您使用的确切命令,这样我们也可以查找拼写错误,并知道您在问题323958中遵循了哪些答案。另外,了解company.com上使用的软件和配置也将很有帮助。

可以尝试的一些事情:

  • GitHub和GitLab设置为使用git作为用户名。也许company.com也这样做。尝试在username2命令中将git替换为git clone
  • 确保您使用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

答案 2 :(得分:1)

通常,Git SCM设计为使用git作为SSH克隆的用户。 SCM中的所有用户公钥都传播给该用户。因此,只要要与SCM中的公钥匹配的私钥,尝试克隆哪个用户都没有关系。

您可以通过运行ssh git@tech-gerrit.sd.company.com:29418来检查密钥是否正常工作,这应该会打印出问候语,以匹配私钥的方式向用户显示

  

IE:对我来说,使用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.
➜  ~

如您所见,所有主要的Steam SCM系统都使用相同的SSH用户,即git@

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

希望这会有所帮助。

也不要忘记将私钥加载到代理。

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