为何不同环境执行ssh-keyscan github.com返回相同公钥?及GitHub默认公钥疑问
为什么不同设备执行
ssh-keyscan github.com结果一致?GitHub有默认公钥吗? 这其实是完全正常的现象,咱们一步步把逻辑理清楚:
1. 为什么所有设备扫出来的结果都一样?
- 先搞懂
ssh-keyscan的核心作用:这个命令是用来获取目标服务器的主机公钥,它的唯一目的是帮你验证你连接的服务器是不是真的GitHub(防止中间人攻击),和你本地有没有配置SSH身份密钥完全无关。 - GitHub的主机公钥是统一对外的:作为大规模服务集群,GitHub对外提供SSH服务的前端节点(比如负载均衡器、入口服务器)用的是同一组主机密钥。不管你从哪台电脑、哪个容器里去扫描,只要能正常连到GitHub的SSH服务端,拿到的都是这组固定的主机公钥。
- 一句话总结:你本地的SSH密钥是用来证明「你是谁」的身份凭证,而
ssh-keyscan拿到的是用来证明「对方是GitHub」的服务器身份标识,两者完全不是一个层面的东西,所以本地有没有密钥根本不会影响扫描结果。
2. GitHub确实有默认的主机公钥
是的,GitHub官方维护着固定的主机公钥,这些就是你通过ssh-keyscan获取到的内容。你可以手动把这些公钥添加到本地的~/.ssh/known_hosts文件中,这样后续SSH连接GitHub时就不会弹出「是否信任该主机」的确认提示了。
举个例子,你执行ssh-keyscan github.com后得到的内容大概是这样的(格式示例):
github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=
这些就是GitHub公开的默认主机公钥,所有合法连接到GitHub SSH服务的请求,都会返回这些公钥。
内容的提问来源于stack exchange,提问作者高欣平
相关产品推荐
相关产品推荐

