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

Posted

技术标签:

【中文标题】如何为另一个用户生成 ssh 密钥?【英文标题】:how to generate an ssh key for another user? 【发布时间】:2019-04-13 16:02:03 【问题描述】:

我正在尝试使用另一个用户 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
  托管 tech-gerrit.sd.company.com
  主机名 tech-gerrit.sd.company.com
  端口 29418
  用户用户名2
  身份文件 /Users/username1/.ssh/username2
尝试使用以下命令进行克隆
git clone ssh://username2@tech-gerrit.sd.company.com:29418
以 username2 身份登录 gerrit 并将 username2.pub 添加到

【问题讨论】:

【参考方案1】:
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. 我说这可能不是你唯一的问题。【参考方案2】:

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

一些尝试:

GitHub 和 GitLab 设置为使用 git 作为用户名。也许 company.com 也这样做。尝试在您的 git clone 命令中将 username2 替换为 git。 确保使用 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 服务器克隆 @Flair - 感谢您提供详细信息。我假设第一个命令实际上是ssh-keygen -f ~/.ssh/username2 一个问题是在运行ssh-keygen -f ~/.ssh/username2 时,它会创建一个ssh 密钥,但是当我打开sshkey 时,它不是来自用户名2,而是来自用户名1,即登录到机器的用户名,是吗?预计? 一个 ssh 密钥只是一个 ssh 密钥。它不属于任何人。公钥末尾的user@host 是注释; ssh 不使用它们。 (但是,这些文件归 Linux 用户所有,就像 Linux 文件系统上的所有其他文件一样。)我的任何其他建议是否解决了您的问题? 试过了,没用,报错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. 【参考方案3】:

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

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

I.E:对于我来说,使用 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!
➜  ~

比特桶

➜  ~ 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 添加密钥。

【讨论】:

以上是关于如何为另一个用户生成 ssh 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何为詹金斯设置 ssh 密钥以通过 ssh 发布

如何为本地 git (github) 存储库永久添加 SSH 密钥? [复制]

如何为我的新 gitlab 帐户生成新的 ssh-key?

如何为 jenkins git 插件指定 ssh 密钥

为“apache”用户生成 SSH 密钥

markdown 如何为两个GitLab帐户设置两个SSH密钥