如何为另一个用户生成 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 密钥?的主要内容,如果未能解决你的问题,请参考以下文章