我正在尝试连接到位于我的 Web 服务器上的远程 Git 存储库并将其克隆到我的机器上。
我的命令使用以下格式:
git clone ssh://username@domain.com/repository.git
这对我的大多数团队成员来说都很好。通常运行此命令后,Git 会提示输入用户密码,然后运行克隆。但是,在我的一台机器上运行时,出现以下错误:
主机密钥验证失败。 致命:无法从远程存储库中读取。
主机密钥验证失败。
致命:无法从远程存储库中读取。
我们没有使用 SSH 密钥连接到这个存储库,所以我不确定 Git 为什么要在这台特定的机器上检查一个。
您正在通过 SSH 协议进行连接,如ssh://克隆 URL 上的前缀所示。使用 SSH,每个主机都有一个密钥。客户端记住与特定地址相关联的主机密钥,如果主机密钥出现变化,则拒绝连接。这可以防止中间人攻击。
ssh://
domain.com 的主机密钥已更改。 如果这对您来说并不可疑,请${HOME}/.ssh/known_hosts通过编辑以删除 domain.com 的行或让 SSH 实用程序为您执行此操作,从而从本地缓存中删除旧密钥。
${HOME}/.ssh/known_hosts
ssh-keygen -R domain.com
从这里,您可以自己记录更新的密钥
ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts
或者,等价地,ssh下次您连接git fetch, git pull, 或git push(甚至是普通的 ol’ ssh domain.com)时,请在提示时回答“是”,为您执行此操作
ssh
git fetch
git pull
git push
ssh domain.com
无法确定主机“domain.com (abcd)”的真实性。 RSA 密钥指纹为 XX:XX:...:XX。 您确定要继续连接(是/否)?
known_hosts出现这个提示的原因是你删除后domain.com不在了,估计系统里也没有了/etc/ssh/ssh_known_hosts,所以ssh无法知道连接另一端的主机是否真的是domain.com。(如果 中的键不正确/etc,则具有管理权限的人将不得不更新系统范围的文件。)
known_hosts
/etc/ssh/ssh_known_hosts
/etc
我强烈建议您考虑让用户也使用密钥进行身份验证。这样,ssh- agent可以方便地存储密钥材料(而不是每个人都必须为每次连接服务器输入密码),并且密码不会通过网络传输。
ssh- agent