SSH配置-相同的主机,但密钥和用户名不同


31

我已经设置了两个GitHub帐户,但是我无法获取ssh密钥来正常工作。我尝试了各种配置。


Host github_username1
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github_username2
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

适用于username1:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push 在username2的仓库中:

ERROR: Permission to username2/repo.git denied to username1.
fatal: The remote end hung up unexpectedly

我也试着git pushIdentityFileUser设置下相同Host。输出与最后一个配置相同。

我认为git会自动搜索主机“ github.com”,因为远程是这样的。据说Host可以是任何您想要的(/programming//a/3828682)。有什么办法可以从ssh config更改特定Repo使用哪个Host?

如果可以仅通过〜/ .ssh / config解决此问题,则将是理想的。

Answers:


44

OpenSSH客户端仅使用该Host行作为部分标识符,其他所有设置。如果您连接到foo@bar.com,SSH将不会搜索“ User foo”;它只会搜索“ Host bar.com”。

换句话说:如果您Host github_username2的SSH配置中包含“ ”,则必须在Git遥控器中使用同一主机github_username2,而不是git@github.com

但是,这不是导致身份验证失败的原因,对于github.com,SSH 用户名必须为“ git。GitHub SSH服务器仅通过用户的SSH密钥识别用户。


正确的SSH配置为:

Host github_username1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_1
Host github_username2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_2

Git配置:

[remote "origin"]
    url = git@github_username1:username2/repo.git

注意:即使我git在示例中在两个地方都指定了用户名,也只需要指定一次git@-Git URL将比User gitSSH配置优先。


2
在某些情况下,你可能需要添加IdentitiesOnly=yes在每个host部分以确保ssh将只挑选所选择的身份文件,并没有违约/别的尝试任何事情..
TCB13
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.