为什么 ssh 会忽略我的 ~/.ssh/config?无法提交到 github

为什么 ssh 会忽略我的 ~/.ssh/config?无法提交到 github

我已经将 OpenSSH 配置为在登录 github 时使用特定密钥......

[mpenning@mudslide .ssh]$ pwd
/home/mpenning/.ssh
[mpenning@mudslide .ssh]$ ls -la | grep config
-rw-r--r--  1 mpenning mpenning  473 Jan 23 09:49 config
[mpenning@mudslide .ssh]$ head -n 4 config
Host gh
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_github
[mpenning@mudslide .ssh]$

但是,当我通过 ssh 连接到 github 而没有在 CLI 上明确调用 github 的私钥时,身份验证失败:

[mpenning@mudslide .ssh]$ ssh -F ./config [email protected]
Permission denied (publickey).    ^^^^^^^^ This used to work
[mpenning@mudslide .ssh]$

我可以强制它工作的唯一方法是当我 ssh 时明确调用私钥...

[mpenning@mudslide .ssh]$ ls -la | grep github
-r--------  1 mpenning mpenning 3243 Nov 24  2016 id_rsa_github
-rw-r--r--  1 mpenning mpenning  743 Nov 24  2016 id_rsa_github.pub
[mpenning@mudslide .ssh]$ ssh -i ./id_rsa_github [email protected]
PTY allocation request failed on channel 0
Hi mpenning! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
[mpenning@mudslide .ssh]$

我的config文件昨天还正常工作……我没有对它做任何更改。该config文件已经指向正确的私钥。

突然,ssh 似乎忽略了我的 github 配置。它甚至从未尝试过正确的私钥...

[mpenning@mudslide .ssh]$ ssh -v [email protected] 2>&1 | grep github
debug1: Connecting to github.com [192.30.253.113] port 22.
debug1: Host 'github.com' is known and matches the RSA host key.
[mpenning@mudslide .ssh]$

显然这是可行的,但我不应该使用-i......

[mpenning@mudslide .ssh]$ ssh -i id_rsa_github -v [email protected] 2>&1 | grep github
debug1: Connecting to github.com [192.30.253.113] port 22.
debug1: identity file id_rsa_github type 1
debug1: identity file id_rsa_github-cert type -1
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Offering RSA public key: id_rsa_github
Authenticated to github.com ([192.30.253.113]:22).
Connection to github.com closed.
[mpenning@mudslide .ssh]$

我的问题:

  • 是什么破坏了它?
  • 我该如何修复它?

答案1

您没有调用来连接到您在配置中定义的主机。

ssh gh不使用ssh .... [email protected]

但为什么呢?——见下文:

[mpenning@mudslide.ssh]$ ssh -F./config[电子邮件保护]权限被拒绝(公钥)。^^^^^^^^^ 这曾经有效

我认为它从来没有发生过(你用历史记录检查过吗?)。我认为你用过ssh -F ./config gh

gh您在配置中定义主机如下:

Host gh
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_github

因此,您只需调用即可ssh gh。如果您想覆盖配置中的内容,则可以传递其他参数,例如,如果您想使用不同的用户,但是,由于您已经设置了所有必需的变量,因此您应该只使用 Host 变量,而不用做任何其他事情。

-F ./config说实话,你甚至不需要通过。

答案2

确保您的 ~/.ssh/config 由您的用户和“staff”组拥有(而不是 root/root)

相关内容