Git 和 SSH,使用哪个密钥?

假设您的 .ssh目录包含30个密钥(15个私有密钥和15个公共密钥)。

在 Git 中哪里可以检查哪一个是用来连接到给定的远程存储库的?

127016 次浏览

因为 git只使用 ssh连接,所以它将使用 ssh用来连接到远程主机的任何键。有关详细信息,请参阅 ~/.ssh/config文件; host块使用 IdentityFile指令来指定要使用的私钥。ssh_config(5)手册包含完整的详细信息。

除非在 .ssh/config上指定,否则它将使用默认的私钥文件。

默认文件是 ~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/identity,具体取决于协议版本。

.ssh/config文件中的以下条目解决了这个问题

  host git.assembla.com
user git
identityfile ~/.ssh/whatever

其中 ~/.ssh/whatever是您的私钥的路径

此外,用户和主机可以从

git push git@git.assembla.com:repo_name.git
^__ ^_______________
user host

在远程服务器上,编辑 sshd _ config 文件并将 LogLevel 从 INFO 更改为 VERBOSE,然后重新启动 ssh。

现在,您的日志文件将保存用于验证每个用户的密钥的指纹。

在 Ubuntu 上,这些文件是:

/etc/ssh/sshd_config
/var/log/auth.log

但是它们在其他发行版上可能不同,只需要在谷歌上搜索它们的位置(例如使用/var/log/security)。

在详细模式(即 ssh -v user@host)下执行 ssh 将打印大量的调试信息,其中还包含它尝试登录哪些密钥文件的详细信息。

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

现在,如果您将这些结合起来,使用 Git 自己的 SSH 帮助页面中的步骤4,ssh -vT git@github.com可以给出答案。

注意: 还可以使用 -i开关在命令执行期间告诉 ssh 要使用哪个密钥文件。

这可能是超级边缘,但是在运行 ssh -vT git@github.com之后,它向我显示它正在检查 /root/.ssh键,我期待它检查我的主目录,然后我意识到我以 root 身份登录!

我觉得对我来说最实际的应该是:

GIT_SSH_COMMAND='ssh -v' git …

当然,根据不同的情况,将它导出到当前的 SHELL 环境可能会有所帮助,这样您就不必每次都手动预置它。那就是这样:

export GIT_SSH_COMMAND='ssh -v'
git …

ーー正如 man git所指出的,有一些环境变量会影响使用 SSH 的 Git 操作。根据 man ssh,你可以在部署 -v选项时获得一些调试信息(不仅如此,如果你想知道更多,还可以查看手册)。

用的是哪把钥匙?

在输出中,您将看到 smth 类似于..。

debug1: Offering public key: …

这就是你问题的答案。