【问题标题】:Git and SSH, which key is used?Git 和 SSH,使用哪个密钥?
【发布时间】:2012-06-21 01:02:14
【问题描述】:

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

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

【问题讨论】:

  • 投票“关闭”的人,这个问题 - 与编程直接相关,原因与此处允许有关 GIT 的问题相同
  • 可以说...这确实是一个超级用户的问题,这里的问题不是 git,而是它运行的平台。您不能在“in git”中检查问题,因为 git 不在乎,它只与您如何使用 ssh 以及它的配置方式有关。您是否使用 ssh-agent、任何类型的密钥管理系统、您使用什么操作系统、什么版本等等?

标签: git ssh


【解决方案1】:

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

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

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

另外,用户和主机可以从

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

【讨论】:

  • 所以如果我想为不同的主机使用另一个 ssh 密钥,我会在第一个之后重复相同的操作吗?身份文件是否属于它之前的第一个主机?
  • 好的,是的,好像是这样cyberciti.biz/faq/…
【解决方案2】:

在详细模式下执行 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 help pagessh -vT git@github.com中的Step 4结合起来,可以给你答案。

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

【讨论】:

  • 您也可以使用 grep ssh 命令的标准错误输出来查找密钥文件,如下所示:ssh -vv user@host 2> >(grep Offering) - 这会让事情变得更容易。最后一个文件应该是公钥。例如:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
  • githubgit 不同。
【解决方案3】:

我想说最符合我口味的是:

GIT_SSH_COMMAND='ssh -v' git …

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

export GIT_SSH_COMMAND='ssh -v'
git …

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

使用哪个键?

在输出中你会看到...

debug1: Offering public key: …

...这是您问题的答案。

【讨论】:

  • 是的。这应该是公认的答案。要使其在 Windows CMD 上运行(呃),请使用:set GIT_SSH_COMMAND=ssh -v。这帮助我弄清楚了 ssh-config Inlcude-Path 在 Windows 上应该是这样的:Include /C/Users/YourUserName.ssh/config 制作 ssh,因此 git 使用配置文件,然后使用例如 HOST * 条目来指定身份文件 git /ssh 使用。
【解决方案4】:

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

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

【讨论】:

  • 何时将密钥添加到已知主机?
【解决方案5】:

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

【讨论】:

  • 这种技术以及其他相同的ssh 审讯方式是正确的解决方案。谢谢。
  • 这是最有用的答案,它确实向您展示了使用的 ssh 密钥。谢谢。
【解决方案6】:

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

【讨论】:

  • 嗯 .. 我的系统上不存在该文件。应该吗?
  • @JAM 你用的是什么操作系统?此外,有时配置文件位于/etc/ssh/ssh_config
  • 我在 MACOS 上。找到 /etc/ssh_config,这似乎是一个充满评论条目的文件
  • @sarnold 你可以自己创建~/.ssh/config
【解决方案7】:

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

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

在 Ubuntu 上,这些文件是:

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

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

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 2017-07-02
    • 2023-01-05
    • 1970-01-01
    • 2020-04-09
    • 2014-01-18
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    相关资源
    最近更新 更多