假设您的 .ssh目录包含30个密钥(15个私有密钥和15个公共密钥)。
.ssh
在 Git 中哪里可以检查哪一个是用来连接到给定的远程存储库的?
因为 git只使用 ssh连接,所以它将使用 ssh用来连接到远程主机的任何键。有关详细信息,请参阅 ~/.ssh/config文件; host块使用 IdentityFile指令来指定要使用的私钥。ssh_config(5)手册包含完整的详细信息。
git
ssh
~/.ssh/config
host
IdentityFile
ssh_config(5)
除非在 .ssh/config上指定,否则它将使用默认的私钥文件。
.ssh/config
默认文件是 ~/.ssh/id_rsa、 ~/.ssh/id_dsa或 ~/.ssh/identity,具体取决于协议版本。
~/.ssh/id_rsa
~/.ssh/id_dsa
~/.ssh/identity
.ssh/config文件中的以下条目解决了这个问题
host git.assembla.com user git identityfile ~/.ssh/whatever
其中 ~/.ssh/whatever是您的私钥的路径
~/.ssh/whatever
此外,用户和主机可以从
git push git@git.assembla.com:repo_name.git ^__ ^_______________ user host
在远程服务器上,编辑 sshd _ config 文件并将 LogLevel 从 INFO 更改为 VERBOSE,然后重新启动 ssh。
现在,您的日志文件将保存用于验证每个用户的密钥的指纹。
在 Ubuntu 上,这些文件是:
/etc/ssh/sshd_config /var/log/auth.log
但是它们在其他发行版上可能不同,只需要在谷歌上搜索它们的位置(例如使用/var/log/security)。
在详细模式(即 ssh -v user@host)下执行 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可以给出答案。
ssh -vT git@github.com
注意: 还可以使用 -i开关在命令执行期间告诉 ssh 要使用哪个密钥文件。
-i
这可能是超级边缘,但是在运行 ssh -vT git@github.com之后,它向我显示它正在检查 /root/.ssh键,我期待它检查我的主目录,然后我意识到我以 root 身份登录!
/root/.ssh
我觉得对我来说最实际的应该是:
GIT_SSH_COMMAND='ssh -v' git …
当然,根据不同的情况,将它导出到当前的 SHELL 环境可能会有所帮助,这样您就不必每次都手动预置它。那就是这样:
export GIT_SSH_COMMAND='ssh -v' git …
ーー正如 man git所指出的,有一些环境变量会影响使用 SSH 的 Git 操作。根据 man ssh,你可以在部署 -v选项时获得一些调试信息(不仅如此,如果你想知道更多,还可以查看手册)。
man git
man ssh
-v
用的是哪把钥匙?
在输出中,您将看到 smth 类似于..。
debug1: Offering public key: …
这就是你问题的答案。