我正在尝试使用另一个用户username2
克隆到gerrit服务器,但是它失败并显示Permission denied (publickey)
。我尝试遵循Server Fault question "how do you create an ssh key for another user?"
以下步骤无效。我想念什么?
ssh-keygen -f ~/.ssh/username2
cp ~/.ssh/username2.pub ~/.ssh/authorized_keys
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
答案 0 :(得分:2)
IdentityFile /Users/username1/.ssh/username2.pub
这可能不是您唯一的问题,但是您可能在此处指定了错误的文件。扩展名为 .pub 的密钥文件包含密钥的公共部分。没有 .pub 的相应文件包含密钥的私有部分。 IdentityFile
指令需要私钥文件的名称,而不是公钥文件的名称。尝试将此指令更改为:
IdentityFile /Users/username1/.ssh/username2
^-- note no ".pub"
看看情况是否更好。
答案 1 :(得分:1)
最好列出您使用的确切命令,这样我们也可以查找拼写错误,并知道您在问题323958中遵循了哪些答案。另外,了解company.com上使用的软件和配置也将很有帮助。
可以尝试的一些事情:
git
作为用户名。也许company.com也这样做。尝试在username2
命令中将git
替换为git clone
。ssh-keygen -t rsa -f ~/.ssh/username2
Host
行应与命令行上使用的名称匹配,因此Host tech-gerrit.sd.company.com
-否则git和ssh将不会使用您的〜/ .ssh / config 中的所有条目。答案 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
添加密钥。