Gitエラー:リモートリポジトリへの接続時に「ホストキーの検証に失敗しました」


221

WebサーバーにあるリモートGitリポジトリに接続し、それを自分のマシンに複製しようとしています。

コマンドに次の形式を使用しています。

git clone ssh://username@domain.com/repository.git

これは私のチームメンバーのほとんどにとって問題なく機能しています。通常、このコマンドを実行した後、Gitはユーザーのパスワードの入力を求め、それから複製を実行します。しかし、私のマシンの1つで実行すると、次のエラーが発生します。

ホストキーの検証に失敗しました。

致命的:リモートリポジトリから読み取れませんでした。

このリポジトリへの接続にSSHキーを使用していないため、この特定のマシンでGitがキーをチェックしている理由がわかりません。


1
あなたはしているあなたのURLで始まるどのよう通知は、このリポジトリに接続するためにSSHを使用してssh://
ブランドン

私が持っている同様の問題を。誰かが私を助けてくれますか?私は行き詰まっています:(
SepSol

回答:


164

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

または、同等に、聞かせてsshあなたのためにあなたが次回接続時にそれを行うgit fetchgit pullまたはgit push(あるいは無地老いssh domain.comはいプロンプトが表示されたら答えることで)を

ホスト 'domain.com(abcd)'の信頼性を確立できません。
RSAキーフィンガープリントはXX:XX:...:XXです。
接続を続行してもよろしいですか(はい/いいえ)?

このプロンプトが表示される理由は、domain.comがknown_hosts削除後に削除され、おそらくシステムの/etc/ssh/ssh_known_hostsにないためssh、接続の反対側のホストが本当にdomain.comであるかどうかを知る方法がないためです。(間違ったキーがにある場合、/etc管理者権限を持つユーザーがシステム全体のファイルを更新する必要があります。)

ユーザーにキーによる認証を行うことも検討することを強くお勧めします。そうssh-agentすれば、(サーバーへの接続ごとにすべてのユーザーがパスワードを入力しなくても済むのでなく)便利なようにキーマテリアルを保存でき、パスワードがネットワークを経由することはありません。


3
おかしなことに、実行sudo ssh-keygen -R domain.comすると既存のknown_hostsファイルの名前をに変更し、rootだけが読み取ることができるknown_hosts.oldコピー作成できます。(-rw------- root rootchownこれを適切なユーザーに簡単に戻すことができますが、gitが壊れている理由を午後のデバッグで無駄にすることもあります。:D
Andrew Rueckert

1
Are you sure you want to continue connecting (yes/no)?。私と同じ過ちを犯さないでください。入力する必要がありyesます。
Enterキーを押す

305

以前にクローニングgit repoでエラーが発生したため、ホストキーの検証に失敗しました。fatal:リモートエンドが突然ハングアップしました。GitHubを承認済みホストのリストに追加します。

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts


3
これは最も安全な方法であり、すでにキーが存在していません。これは、サーバーに接続するたびではなく、一度だけ実行することを前提としています。
Zenexer

私の会社のプライベートフィットリポジトリはecdsaをキーとして使用しているため、ソリューションが機能しない場合は、アルゴリズムが正しくないことが原因である可能性があります
Fendy

8
これは受け入れられる答えになるはずです。私の日を救ってくれてありがとう。
Keyur 2017

も私のために働いた、なぜ自分のリポジトリを複製できないのかと思っていた
StackAttack

誰かがこの投稿にフラグを付けました(誤って)。口コミから
Wai Ha Lee

55

同様の問題がありましたが、SSHキーを使用しています。上記のTupyの回答から、既知のホストのリストにknown_hostsファイルが存在しないか、github.comが存在しないことが問題であることがわかりました。これを解決するために私が従った手順は次のとおりです-

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. このコマンドで公開鍵を開き、$ cat ~/.ssh/id_rsa.pubそれをコピーします。
  5. id_rsa.pubキーをGitHubプロファイルのSSHキーリストに追加します

1
@OJFord FYI:私はあなたのコメントを時代遅れにするような方法で元の回答を編集しました。TBHとすべての敬意をもって、そもそも完全に正しくはありませんでした。touchコマンドは、ケースに失敗する~/.sshステップ1がまだ必要とされたので、存在しないディレクトリ。またtouch>>リダイレクトを使用する前にファイルを使用する必要はありません。必要に応じて作成されます(ただし、パス全体ではなくファイルのみなので、引き続きmkdir -p必要です)。この-pオプションは、ディレクトリがすでに存在する場合に機能させます。
Tad Lispy

1
ssh-keyscan新しいsshキーの追加に関するGithubのドキュメントにないのは、#2 です。
Phil Andrews、

1
Dockerfile許可が得られないという問題がありました。ここに2番目のステップを追加すると、その問題が修正されます!素晴らしい仕事をありがとう
スペンサーポロック

37

これは、githubが現在既知のホストにないために発生しています。

既知のホストにgithubを追加するように求められます。これが発生していない場合は、実行ssh -T git@github.comしてプロンプトを再度受信できます。


2
プロンプトが表示されない場合、これが正しい答えです。
Matthias Hagemann、2018

15

私にとっては、「接続を続行しますか(yes / no)?」というプロンプトで「yes」と入力するだけでした。Enterキーを押すだけではなく、


この答えにより、「yes」と入力してbitbucketサーバーをknown_hostsに追加するために、ビルドサーバーで手動でリポジトリを複製する必要があることに気づきました
Sashah

1
@Sashah必要なのがknown_hostsのbitbucketサーバーだけの場合は、ファイルを手動で編集できます。これが唯一の理由である場合、リポジトリを複製する必要はありません。
Code-Apprentice

7

新しくインストールしたシステムでも同じ問題が発生しましたが、これはudevの問題でした。ありませんでした/dev/ttyノードので、私はしなければなりませんでした:

mknod -m 666 /dev/tty c 5 0

1
/ dev / ttyがファイルとして作成されたので、それは私にはうまくいきました、非常に奇妙です!(したがって、それを削除してからmknodを使用して再作成する必要があります)
Doomsday

@Geoffroy、/ dev / ttyを削除しましたが、sudoを実行すると、次のエラーが発生します。sudo:申し訳ありませんが、sudoを実行するにはttyが必要です
Milad

@ xe4me実際に必要なシステムによっては、削除するべきだとは言っていません。再起動すると修正されます。
Geoffroy 14

@Geoffroy、実際には最初のコメンテーターですが、削除して再作成する必要があると言いました:dいいえ、再起動は機能しませんでした。ルートを教えなければなりませんでした。彼はそれを修正しました:d
Milad

6

ファイアウォールによって常に保護されているイントラネット(そうでなければ危険)にいる場合は、〜/ .ssh / configに次の行を含めるだけです。

Host *
StrictHostKeyChecking no
UserKnownHostsFile = / dev / null


2
これは依然として危険であり、企業のファイアウォールがないためです。サーバーキーを確認せずに本物のgithubと通信していることをどうやって確認しますか?
Mnebuerquo 2018年

1
企業環境では、ローカルのgitリポジトリが主に使用され、オープンソースのものは決して使用されません。ファイルの先頭にある最悪の場合の.ssh構成には、sshがより具体的な一致を選択するためのgithub明示的なホスト関連の構成行を含めることができます。
18

5

私にとってうまくいったのは、最初に新しいコンピューターのSSHキーを追加することでした。私は、GitLabの次の手順に従って、SSHキーを追加しました。私はWin10を使用しているため、WindowsのGit Bashでこれらすべてのコマンドを実行する必要があったことに注意してください(通常のDOSコマンドシェルでは機能しませんでした)。

次に、Git Bashで、git clone問題が発生したレポを実行する必要がありました。私の場合は、既にローカルにあり、コミットを失いたくないため、別の名前に複製する必要がありました。例えば

git clone ssh://git@gitServerUrl/myRepo.git myRepo2

次に、それを既知のホストリストに追加するように求めるプロンプトが表示されました。質問は次のようになります。

接続を続行してもよろしいですか(はい/いいえ)?

私は「はい」と入力し、それが最終的に機能しました。通常、次のようなメッセージが表示されます。

警告:既知のホストのリストに「[your repo link]」(ECDSA)が永久に追加されました。

:Windowsを使用している場合は、すべてのコマンドにGit Bashを使用していることを確認してください。これは通常のcmdシェルまたはpowershellでは機能せず、Git Bashで実際に実行する必要がありました。

最後に、2番目のクローンリポジトリ(myRepo2例では)を削除して最初のリポジトリに戻り、お気に入りのエディタVSCodeで通常のようにすべてのGitを最終的に実行できました。


実際、Cygwinプロンプトはgit bashプロンプトとほとんど同じですが、git bashプロンプトでしか機能しません。
Josiah Yoder

3

git for Windowsを使用している場合。

  • git GUIを開きます。
  • git GUIでローカルgitリポジトリを開きます。
  • リモートを追加するか、リモートがすでに存在する場合はプッシュします。
  • 続行するかどうかの質問に「はい」と答えてください。

GUIクライアントはあなたにあなたのためのキーを追加します~/.ssh/known_hosts。これは頻繁に実行しない方が覚えやすく、またgitコマンドラインを使用する必要もありません(標準のWindowsコマンドラインにはssh-keyscan実行可能ファイルがありません。


2

リモートサーバーがプライベートリポジトリに接続する場合、sshを介して認証されます。ssh-keygenを使用して秘密鍵と公開鍵のペアを作成するか、すでに公開鍵と秘密鍵を持っている場合。プライベートリポジトリの設定に公開鍵をコピーして貼り付けます。

YourPrivateRepo->設定->デプロイキー->デプロイキーの追加->公開キーを貼り付けます。

これで、リモートサーバーはプライベートリポジトリに接続できるようになります。

注:デプロイキーには、リポジトリを読み取るためのアクセス権しかありません。書き込みアクセスを明示的に許可する必要があります。


1

リモートホストキーが変更されたことを意味します(ホストパスワードの変更の可能性があります)。

端末は、このコマンドを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

もう一度お試しください。これでうまくいくと思います。


注:シェルによっては、角括弧\ [および\]をエスケープするか、引用符を使用する必要がある場合があります。
Phlarx 2017年

1

尋ねられたとき:

Are you sure you want to continue connecting (yes/no)?

応答としてyesと入力します

それが私が私の問題を解決した方法です。しかし、Enterボタンを押すだけでは機能しません。


0

Jenkinsfileの「https」URL形式の「git url」を使用するか、どこでも使用できます。

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'


0

イメージが公開されているときに、ビルド時にDockerFile内で同じエラーに直面していました。Dockerfileにはほとんど変更を加えませんでした。

 RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

これは、git @ github.com:...構文を使用すると、SSHを使用してクローンが作成され、コンテナ内で秘密鍵を使用できないためです。代わりにRUN git clone> https://github.com/edenhill/librdkafka.gitを使用する必要があります。


-1

同様の問題がありましたが、残念ながらGitExtensions HMIを使用していて、パスフレーズを書いたことを忘れていました。HMIを使って....忘れてください!キーを生成するときにパスフレーズを入力しないでください。


-4

私のgit cloneリポジトリではないレポジトリにアクセスしようとしたときにこのメッセージが表示されました。修正はフォークしてクローンを作成することでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.