假设您的.ssh
目录中包含30个密钥(15个私钥和15个公钥)。
在Git中,如何查看使用哪个密钥连接到给定的远程存储库?
在 .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,即ssh -v user@host
,将打印大量调试信息,其中还包含有关尝试登录的密钥文件的详细信息。
执行ssh时使用-v选项可以开启详细模式,这样会输出很多调试信息,其中包含了登录所需的密钥文件的详细信息。
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 -vv user@host 2> >(grep Offering)
,这样会更加方便。最后一个文件应该是公钥。例如:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
。 - Gianfranco P.我会说,对我的口味来说最实用的是:
GIT_SSH_COMMAND='ssh -v' git …
当然,具体情况而定,将其导出到当前SHELL环境可能会更有益,这样您就不必每次手动添加它。那么就应该这样:
当然,根据情况而定,只需将其导出到当前的SHELL环境中,这样您就无需每次手动添加它,这可能更有好处。那么做的话,就是这样:
export GIT_SSH_COMMAND='ssh -v'
git …
根据man ssh
,您可以在使用-v
选项时获取一些调试信息。如man git
所建议的,有几个环境变量会影响Git在使用SSH时的操作。 (如果您还想了解更多,请查阅手册)。
使用了哪个密钥?
在输出中,您将看到类似于...
debug1: Offering public key: …
... 这就是你问题的答案。
set GIT_SSH_COMMAND=ssh -v
。这帮助我发现,在Windows上,ssh-config的Include-Path应该像这样:Include /C/Users/YourUserName.ssh/config
,以便让ssh和git使用配置文件,然后使用一个HOST *
条目来指定git/ssh使用的身份验证文件。 - icyerasor-v
属于 set
。这个命令对我有效 $env:GIT_SSH_COMMAND='ssh -v'
。 - Serj如果没有在 .ssh/config
文件中指定私钥文件,SSH 将使用默认的私钥文件。
默认私钥文件是 ~/.ssh/id_rsa
或 ~/.ssh/id_dsa
或 ~/.ssh/identity
,具体取决于协议版本。
这可能有些边缘情况,但运行ssh -vT git@github.com
后,我发现它正在检查/root/.ssh
的密钥,而不是我期望的家目录下的密钥,后来发现我以root用户身份登录了!
由于git
只是使用ssh
进行连接,它将使用ssh
用于连接到远程主机的任何密钥。有关详细信息,请参见~/.ssh/config
文件;host
块使用IdentityFile
指令来指定要使用的私钥。完整详情请参阅ssh_config(5)
手册页。
/etc/ssh/ssh_config
。 - user849425/etc/ssh_config
,看起来是一个充满注释条目的文件。 - James Raitsev~/.ssh/config
。 - xdazz在远程服务器上,编辑sshd_config文件,将LogLevel从INFO更改为VERBOSE并重新启动ssh。
现在你的日志文件将保存用于身份验证每个用户的密钥指纹信息。
在Ubuntu上,这些文件是:
/etc/ssh/sshd_config
/var/log/auth.log
但是在其他发行版上可能会有所不同。只需搜索它们的位置(例如,有些人使用 /var/log/secure)。