使用非默认的密钥名称(而不是id_rsa)

23
我已经按照以下方式设置了Github无密码登录。
ssh-keygen -t rsa  -P ''  
cat .ssh/id_rsa.pub  |xclip 

我将公钥复制到 Github 网站的 ssh 和 gpg keys 中。
git init  
git config --global user.name "someone"  
git config --global user.email  "sbd@gmail.com"  
git config remote.origin.url git+ssh://git@github.com/someone/newstart.git  
ssh -T git@github.com  
git clone  git+ssh://git@github.com/someone/newstart.git   /tmp/newstart

以上内容有效。

现在我想在Github中使用不同的密钥名称,而不是其默认名称id_rsa

ssh-keygen -t rsa  -P ''  -f  .ssh/id_rsa.github
cat .ssh/id_rsa.github.pub  |xclip 

我将新的公钥粘贴到Github网站上的ssh和gpg密钥中。

git init  
git config --global user.name "someone"  
git config --global user.email  "sbd@gmail.com"  
git config remote.origin.url git+ssh://git@github.com/someone/newstart.git  
ssh -T git@github.com 

上述方法不起作用。
git clone  git+ssh://git@github.com/someone/newstart.git   /tmp/newstart

以上方法亦无效。
ssh -i .ssh/id_rsa.github -T git@github.com

上述命令可以成功连接到Github,但是我无法输入以下命令以克隆存储库。
git clone  -i  .ssh/id_rsa.github  git+ssh://git@github.com/someone/newstart.git   /tmp/newstart

我可以使用其他名称的公钥,比如 id_rsa.github,而不是默认名称 id_rsa 吗?

2个回答

36
你需要告诉SSH在Github上使用这个密钥。将以下内容放入~/.ssh/config文件中:

Original Answer翻译成"最初的回答"

Host github.com
    IdentityFile ~/.ssh/id_rsa.github
    User git

编辑:

我想回应评论中说Github或Gitlab“忽略”HostName并且只使用Host的人。这并不完全正确。

这些块的开头行,即Host行,是一个或多个主机名模式,用于定义何时应用块的其余部分。例如,您可以这样说:

Host example.com *.example.org

这将匹配example.com和所有以.example.org结尾的域名。

Host bitbucket bitbucket.org holymoly
    HostName bitbucket.org
    User git

这段话的意思是:
1. 如果使用 bitbucket, bitbucket.org, 或者 holymoly 作为目标主机名来调用ssh,则应用以下两个属性: 2. 首先,无论用户在命令行上指定了哪个名称,都连接到 bitbucket.org;它们只是别名。 3. 其次,此连接的用户名为 git
这是 HostHostName 之间的区别。
请注意,在上述示例中,即使 bitbucket.org 不在 Host 行中,您仍然可以告诉 ssh 连接到 holymoly,并最终连接到 bitbucket.orgHost 是一个名称和/或模式的列表,您可以在 SSH 命令中指定,触发此块匹配。 HostName 是要使用的真实主机名,如果 Host 中的主机名不是真实主机名。如果没有提供 HostName,则将 Host 的值用作默认值。
您还可以为 Host 使用模式。
Host *.mydomain.com
    HostName proxy.mydomain.com

无论您将主机名设置为什么,只要它在“mydomain.com”域名中,它实际上将连接到指定的代理主机名。希望这有助于解释区别,并使我的最初的回答更容易理解。

3
谢谢,这个有用!奇怪的是,GitHub不从ssh配置文件中获取“Hostname”指令(正如您上面所举的例子只使用“Host”指令),而Bitbucket.org(或bitbucket.com)使用“Host bitbucket \nHostName bitbucket.org”的形式。 - Devy
Gitlab也使用Host并忽略Hostname。奇怪! - Fabio says Reinstate Monica
@FabiosaysReinstateMonica 我扩展了我的答案以更好地解释这个问题。 - Dan Lowe
谢谢,我又试了一遍,你是对的:如果HostName缺失,则默认为主机名,但否则确实会被使用。当我写下之前的评论时,我可能已经搞砸了其他东西。 - Fabio says Reinstate Monica

0
export GIT_SSH_COMMAND='ssh -i ~/.ssh/[public_key_name] -o IdentitiesOnly=yes'
git clone ...

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