web-dev-qa-db-ja.com

Gitエラー:リモートリポジトリに接続するときに "Host Key Verification Failed"

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

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

git clone ssh://[email protected]/repository.git

これは私のチームメンバーの大部分にとってはうまくいった。通常、このコマンドを実行した後、Gitはユーザーのパスワードを要求してからクローンを実行します。しかし、私のマシンの1つで実行していると、次のようなエラーが表示されます。

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

fatal:リモートリポジトリから読み込めませんでした。

SSHキーを使ってこのリポジトリに接続しているのではないので、Gitがなぜこのマシンでチェックしているのかわからない.

147
bootsz

クローンURLのssh://プレフィックスで示されているように、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)に接続したときに、プロンプトが表示されたらyesと答えることでそれを可能にします。

ホスト 'domain.com(abcd)'の信憑性を確立できません。
 RSAキーのフィンガープリントはXX:XX:...:XXです。
接続を続けますか? (はい・いいえ)?

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

ユーザーにもキーを使用して認証させることを検討することを強くお勧めします。こうすることで、ssh-agentは利便性のために(誰でもサーバーに接続するたびに自分のパスワードを入力する必要があるのではなく)重要な情報を保存でき、パスワードはネットワークを経由することはありません。

90
Greg Bacon
247
Tupy

私は同様の問題を抱えていましたが、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. GitHubプロファイルのSSHキーリストにid_rsa.pubキーを追加します。
36
Saran

Githubが現在あなたの知られているホストにないので、これは起こっています。

既知のホストにgithubを追加するように促されるはずです。これが起こらなかったら、再度プロンプトを受け取るためにssh -T [email protected]を実行できます。

24
Powderham

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

10
Code-Apprentice

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

mknod -m 666 /dev/tty c 5 0
7
Geoffroy

ファイアウォールで常に保護されているオフィスのイントラネットにいる場合(そうでなければ危険です)、単に〜/ .ssh/configに以下の行を追加してください。

ホスト *
StrictHostKeyChecking no
UserKnownHostsFile =/dev/null

6
sunil

私のために働いたのは最初に新しいコンピュータの私のSSHキーを追加することでした、私は GitLabからこれらの指示に従った - SSHキーを追加します 。私はWin10を使っているので、Windows上のGit Bashでこれらすべてのコマンドを実行しなければならなかったことに注意してください(通常のDOS cmdシェルでは機能しませんでした)。

それから、Git Bashで、私は問題のあるリポジトリのgit cloneをしなければなりませんでした、そして私は、すでにローカルに持っていてコミットを失いたくないので、別の名前に複製しなければなりませんでした。例えば

git clone ssh://[email protected]/myRepo.git myRepo2

それから私はそれを既知のホストリストに追加するためのプロンプトを得ました、質問はこれかもしれません:

接続し続けますか?(はい/いいえ)?

私は "はい"とタイプして、それはついにうまくいきました、あなたは典型的にこれと同じようなメッセージを得るべきです:

警告:既知のホストのリストに '[あなたのレポリンク]'(ECDSA)を永久に追加しました。

:Windowsを使用している場合は、すべてのコマンドにGit Bashを使用してください。これは通常のcmdシェルまたはpowershellでは機能しませんでした。 Git Bash。

最後に2番目のクローンレポジトリ(この例ではmyRepo2)を削除して最初のレポジトリに戻り、ついに私の大好きなエディタVSCodeでGitのすべてのことができるようになりました。

4
ghiscoding

Windows用のgitを使用している場合.

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

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

2
Julian Knight

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

YourPrivateRepo-> Settings-> Deploy Keys-> Add deploy key-> Paste the public key。

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

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

1
Sandy

それはあなたのリモートホストキーが変更されたことを意味します(ホストパスワードの変更かもしれません)、

あなたの端末はこのコマンドをrootユーザーとして実行することを提案しました

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]

あなたはあなたのpc/serverのホストリストからそのホスト名を削除しなければなりません。その推奨コマンドをコピーして、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

もう一度試してください、これがうまくいくことを願っています。

1
Jay Patel

質問されたとき:

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

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

私は自分の問題を解決しました。しかし、エンターボタンを押すだけではうまくいきません。

1
shutsuke

私は同様の問題を抱えていましたが、残念ながらGitExtensions HMIを使用してパスフレーズを書いたのを忘れていました。 HMIを使って…それを忘れないで!鍵を生成するときにパスフレーズを入力しないでください。

0
Jerome Vacher

イメージが公開されている間に、ビルド時にDockerFile内で同じエラーが発生しました。 Dockerfileを少し修正しました。

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

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

0
Adiii

"git url"は、Jenkinsファイルの「https」URL形式で、または好きな場所で使用できます。

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

0
Nitin