Git和SSH,使用哪个密钥?


93

说你的 .ssh目录包含30个密钥(15个私有密钥和15个公开密钥)。

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


10
谁投票赞成“关闭”,这个问题-出于相同的原因,它直接与编程相关,此处允许有关GIT的问题
James Raitsev 2012年

1
可以说...这确实是一个超级用户问题,这里的问题不是git,而是它正在运行的平台。您无法检查“ in git”中的问题,因为git不在乎,它仅与您使用ssh的方式及其配置有关。您是否使用ssh-agent,任何类型的密钥管理系统,您使用什么操作系统,什么版本等?
Arafangion

Answers:


67

在aka模式下执行sshssh -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使用哪个密钥文件。



1
您还可以grep ssh命令的标准错误输出,以查找密钥文件,如下所示:ssh -vv user@host 2> >(grep Offering)-这样会使事情变得更容易。最后一个文件应该是公钥。例如:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.

3
github与...不同git
ForeverWintr '19

66

.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密钥,我会在第一个主机之后重复同样的操作吗?身份文件是否与之前的第一个主机相关?
MikeSchem '17

好的,是的,这似乎是cyberciti.biz/faq/…–
MikeSchem


6

我说最实际的是:

GIT_SSH_COMMAND='ssh -v' git …

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

export GIT_SSH_COMMAND='ssh -v'
git …

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

使用哪个密钥?

在输出中,您将看到……

debug1: Offering public key: …

…这就是您的qn的答案。


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

5

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


嗯..该文件在我的系统上不存在。应该是?
詹姆斯·赖采夫

1
@JAM您正在使用什么操作系统?另外,有时配置文件位于/etc/ssh/ssh_config

我在使用MACOS。找到/etc/ssh_config似乎充满评论条目的文件
James Raitsev 2012年

@sarnold您可以创造~/.ssh/config自己。
xdazz

4

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


除其他相同ssh的询问方式外,此技术是正确的解决方案。谢谢。
eigenfield '19

1

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

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

在Ubuntu上,这些文件是:

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

但它们在另一个发行版中可能有所不同。只需使用google搜索其位置即可(例如,使用/ var / log / secure)。

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.