128

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

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

4

7 回答 7

87

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

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

~/.ssh/whatever您的私钥的路径在哪里

此外,用户和主机可以从

git push git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host
于 2012-06-19T02:20:42.950 回答
83

在详细模式下执行 ssh,又名ssh -v user@host,将打印大量调试信息,其中还包含有关它正在尝试登录的密钥文件的详细信息。

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,使用哪个密钥文件。

于 2014-05-19T05:59:15.543 回答
24

我想说对我的口味最实用的是:

GIT_SSH_COMMAND='ssh -v' git …

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

export GIT_SSH_COMMAND='ssh -v'
git …

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

使用哪个键?

在输出中你会看到...</p>

debug1: Offering public key: …

……这就是你问题的答案。

于 2019-09-08T08:20:59.100 回答
17

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

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

于 2012-06-19T02:00:46.713 回答
12

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

于 2018-11-01T15:13:11.883 回答
7

由于git仅用于ssh连接,因此它将ssh使用用于连接远程主机的任何密钥。详情见~/.ssh/config文件;该host块使用该IdentityFile指令来指定要使用的私钥。ssh_config(5)手册页包含完整的详细信息。

于 2012-06-19T01:51:00.787 回答
1

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

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

在 Ubuntu 上,这些文件是:

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

但它们在另一个发行版上可能会有所不同。只需用谷歌搜索他们的位置(例如,有些人使用 /var/log/secure)。

于 2012-06-19T16:13:47.417 回答