GIT和SSH,使用哪个密钥?

Jam*_*sev 71 git ssh

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

在哪里.ssh,可以检查哪一个用于连接到给定的远程仓库?

Jam*_*sev 55

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

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever
Run Code Online (Sandbox Code Playgroud)

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

此外,可以从中挑选用户和主机

git push git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host
Run Code Online (Sandbox Code Playgroud)


Vaj*_*ecz 55

在详细模式下执行ssh,aka 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).
Run Code Online (Sandbox Code Playgroud)

现在,如果你将它与Git自己的SSH帮助页面中的步骤4结合起来,ssh -vT git@github.com可以给你答案.

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

  • “github”与“git”不同。 (5认同)

poi*_*ige 14

我想说对我来说最实用的是:

GIT_SSH_COMMAND='ssh -v' git …
Run Code Online (Sandbox Code Playgroud)

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

export GIT_SSH_COMMAND='ssh -v'
git …
Run Code Online (Sandbox Code Playgroud)

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

使用哪个键?

在输出中,您会看到类似……

debug1: Offering public key: …
Run Code Online (Sandbox Code Playgroud)

……这是您问题的答案。

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

Rod*_*res 8

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

默认的文件是~/.ssh/id_rsa或者~/.ssh/id_dsa或者~/.ssh/identity根据协议的版本.


Moa*_*oak 7

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


sar*_*old 5

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