运行会警告我,当 GitHub 更改其 SSH 密钥时,可能会出现中间人攻击,这很酷。然后我通过运行获取新密钥并继续克隆存储库。git clone [email protected]/repo.git
ssh-keyscan -t rsa github.com
这两个命令都针对同一个域运行。我想,如果攻击者让我连接到他们的服务器进行克隆,他们也可以对调用执行相同的操作ssh-keyscan
。
我在这里遗漏了什么?我不应该ssh-keyscan
盲目地运行并以其他方式验证新密钥吗?或者这种验证对于像 GitHub 这样的情况没有多大作用?或者这个过程是否还有其他类型的攻击可以保护我免受攻击?
答案1
这个想法是,github(或任何其他远程服务器)更改其密钥是很奇怪的,你需要手动跟进。
您无需通过可能被攻陷的 ssh 通道自动接受、下载和部署新的公钥/服务器密钥,而是使用独立通道;例如访问他们的 https 网站 https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprintsHTTPS 证书链确保没有中间人修改通过该连接传输的数据。
直接下载公钥并将其添加到您的公钥中~/.ssh/known_hosts
以避免这种情况:
ssh [email protected]
The authenticity of host 'github.com (140.82.121.4)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
ECDSA key fingerprint is MD5:7b:99:81:1e:4c:91:a5:0d:5a:2e:2e:80:13:3f:24:ca.
Are you sure you want to continue connecting (yes/no)?
或者在您接受之前:验证提供的指纹是否与已发布的指纹相符。
答案2
这是“首次使用即信任”方案。其价值在于,您只有在第一次看到私钥时(以及密钥被轮换时)才有可能遭受中间人攻击。如果您在多台机器上工作,则可以复制文件~/.ssh/known_hosts
。
据我所知,Github 只轮换过一次 SSH 密钥,这是有原因的。