Git错误:";主机密钥验证失败“;连接到远程存储库时
我正在尝试连接到驻留在web服务器上的远程Git存储库,并将其克隆到我的机器上 我的命令使用以下格式:Git错误:";主机密钥验证失败“;连接到远程存储库时,git,ssh,ssh-keys,Git,Ssh,Ssh Keys,我正在尝试连接到驻留在web服务器上的远程Git存储库,并将其克隆到我的机器上 我的命令使用以下格式: git clone ssh://username@domain.com/repository.git 这对我的大多数团队成员都很有效。通常在运行此命令后,Git会提示输入用户密码,然后运行克隆。但是,在我的一台机器上运行时,我遇到以下错误: 主机密钥验证失败 致命:无法从远程服务器读取 存储库 我们没有使用SSH密钥连接到此存储库,因此我不确定Git为什么要在这台特定的机器上检查一个。您是通
git clone ssh://username@domain.com/repository.git
这对我的大多数团队成员都很有效。通常在运行此命令后,Git会提示输入用户密码,然后运行克隆。但是,在我的一台机器上运行时,我遇到以下错误:
主机密钥验证失败
致命:无法从远程服务器读取
存储库
我们没有使用SSH密钥连接到此存储库,因此我不确定Git为什么要在这台特定的机器上检查一个。您是通过SSH协议连接的,如克隆URL上的
SSH://
前缀所示。使用SSH,每个主机都有一个密钥。客户端会记住与特定地址关联的主机密钥,并在主机密钥出现更改时拒绝连接。这防止了中间人攻击。
domain.com的主机密钥已更改如果您觉得这不可疑,请通过编辑${HOME}/.ssh/known_hosts
删除domain.com的行,或让ssh实用程序使用
ssh-keygen -R domain.com
从这里开始,记录更新后的密钥,或者使用
ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts
或者,当您下次连接到git fetch
、git pull
、或git push
(或者甚至是一个普通的ol'ssh domain.com
)时,在提示时回答yes,让ssh
为您做这件事
The authenticity of host 'domain.com (a.b.c.d)' can't be established.
RSA key fingerprint is XX:XX:...:XX.
Are you sure you want to continue connecting (yes/no)?
无法确定主机“domain.com(a.b.c.d)”的真实性。
RSA密钥指纹是XX:XX:…:XX。
是否确实要继续连接(是/否)?
出现此提示的原因是,删除后domain.com不再位于您的known_hosts
中,并且可能不在系统的/etc/ssh/ssh_known_hosts
中,因此ssh
无法知道连接另一端的主机是否真的是domain.com。(如果/etc
中存在错误的密钥,则具有管理权限的人必须更新系统范围的文件。)
<>我强烈鼓励您考虑使用密钥对用户进行身份验证。通过这种方式,
ssh-agent
可以方便地存储密钥材料(而不是每个人都必须为每个服务器连接输入密码),并且密码不会通过网络传递。我在新安装的系统上遇到了相同的问题,但这是一个udev问题。没有/dev/tty
节点,因此我必须执行以下操作:
mknod -m 666 /dev/tty c 5 0
正如我前面在中所回答的,将GitHub添加到授权主机列表中:
ssh-keyscan-t rsa github.com>~/.ssh/known_hosts
我也有类似的问题,但是使用ssh密钥。根据上面Tupy的回答,我发现问题在于已知主机文件不存在或github.com不在已知主机列表中。以下是我为解决此问题而采取的步骤-
mkdir-p~/.ssh
ssh keyscan-t rsa github.com>~/.ssh/known_hosts
ssh-keygen-t rsa-C“user.email”
$cat~/.ssh/id\u rsa.pub
,然后复制它李>
我也有类似的问题,不幸的是我使用了GitHMI,忘记了我写了一个密码短语。 使用HMI。。。。算了吧!生成密钥时不要输入密码短语 您可以在Jenkins文件或任何您想要的地方使用“https”url格式的“git url”
git url:'https://github.com/jglick/simple-maven-project-with-tests.git“
这表示您的远程主机密钥已更改(可能是主机密码更改)
您的终端建议以root用户身份执行此命令
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]
您必须从pc/服务器上的主机列表中删除该主机名。复制建议的命令并以root用户身份执行
$ sudo su // Login as a root user
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net] // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
$ exit // Exist from root user
请再试一次,希望这能起作用。如果您在office intranet(否则很危险)中,它总是受到防火墙的保护,只需在
~/.ssh/config
中添加以下几行即可
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
对我来说,我只需在提示“您确定要继续连接(是/否)”时键入“是”,而不只是按Enter键。这是因为github当前不在已知主机中
应该提示您将github添加到已知主机中。如果没有发生这种情况,您可以运行
ssh-tgit@github.com
再次收到提示。对我有效的方法是首先添加新计算机的SSH密钥,我按照中的说明进行操作。请注意,由于我使用的是Win10,因此我必须在Git Bash on中执行所有这些命令Windows(在常规DOS命令Shell中不起作用)
然后在Git Bash中,我不得不对我遇到问题的repo进行Git克隆
,在我的例子中,我不得不将它克隆到一个不同的名称,因为我已经在本地拥有它,并且不想丢失我的提交
git clone ssh://git@gitServerUrl/myRepo.git myRepo2
然后我得到了将其添加到已知主机列表的提示,问题可能是:
是否确实要继续连接(是/否)
我输入了“是”,它终于起作用了,您通常会收到类似的消息:
警告:已将“[您的回购链接]”(ECDSA)永久添加到已知主机列表中
注意:如果您在Windows上,请确保所有命令都使用Git Bash,这在常规cmd shell或powershell中不起作用,我真的必须在Git Bash中这样做
最后,我删除了第二个克隆repo(
myRepo2
,在本例中)并返回到我的第一个repo,我终于可以在我最喜欢的编辑器VSCode中像普通一样完成所有Git操作。如果您使用的是Git for Windows
- 打开git GUI
- 在git GUI中打开本地git存储库
RUN git clone https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs
Host github.com
IdentityFile ~/.ssh/github_id_rsa
git clone https://github.com/user/repo.git
The authenticity of host 'host.net (10.0.0.42)' can't be established.
ECDSA key fingerprint is 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00.
Are you sure you want to continue connecting (yes/no)?
git@gitlab.company.net:upendra/mycode.git
http://gitlab.company.net:8888/upendra/mycode.git
ssh-keyscan -p 8888 -t rsa domain.com >> ~/.ssh/known_hosts
[user]$ less ~/.ssh/known_hosts
[domain.com]:8888,[000.00.000.000]:8888 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCi...