私は自分のWebサーバーにあるリモートGitリポジトリに接続し、それを自分のマシンに複製しようとしています。
コマンドに次の形式を使用しています。
git clone ssh://[email protected]/repository.git
これは私のチームメンバーの大部分にとってはうまくいった。通常、このコマンドを実行した後、Gitはユーザーのパスワードを要求してからクローンを実行します。しかし、私のマシンの1つで実行していると、次のようなエラーが表示されます。
ホスト鍵の検証に失敗しました。
fatal:リモートリポジトリから読み込めませんでした。
SSHキーを使ってこのリポジトリに接続しているのではないので、Gitがなぜこのマシンでチェックしているのかわからない.
クローン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 fetch
、git 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
は利便性のために(誰でもサーバーに接続するたびに自分のパスワードを入力する必要があるのではなく)重要な情報を保存でき、パスワードはネットワークを経由することはありません。
クローンgitレポで以前に答えたようにエラーが発生します - ホストキーの検証に失敗しました。 fatal:リモートエンドが突然ハングアップしました 、許可されたホストのリストにGitHubを追加してください:
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
私は同様の問題を抱えていましたが、SSHキーを使用していました。上記のTupyの回答から、問題はknown_hostsファイルが存在しない、またはgithub.comが既知のホストのリストに存在しないことにあることがわかりました。これを解決するために私が従ったステップはここにあります -
mkdir -p ~/.ssh
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
ssh-keygen -t rsa -C "user.email"
$ cat ~/.ssh/id_rsa.pub
で公開鍵を開き、それをコピーします。Githubが現在あなたの知られているホストにないので、これは起こっています。
既知のホストにgithubを追加するように促されるはずです。これが起こらなかったら、再度プロンプトを受け取るためにssh -T [email protected]
を実行できます。
私には、「接続し続けますか?(yes/no)?」というプロンプトで、「yes」と入力するだけでした。単にEnterを押すのではなく。
新しくインストールしたシステムでも同じ問題が発生しましたが、これはudevの問題でした。 /dev/tty
ノードがなかったので、私はしなければなりませんでした:
mknod -m 666 /dev/tty c 5 0
ファイアウォールで常に保護されているオフィスのイントラネットにいる場合(そうでなければ危険です)、単に〜/ .ssh/configに以下の行を追加してください。
ホスト *
StrictHostKeyChecking no
UserKnownHostsFile =/dev/null
私のために働いたのは最初に新しいコンピュータの私のSSHキーを追加することでした、私は GitLabからこれらの指示に従った - SSHキーを追加します 。私はWin10を使っているので、Windows上のGit Bashでこれらすべてのコマンドを実行しなければならなかったことに注意してください(通常のDOS cmdシェルでは機能しませんでした)。
それから、Git Bashで、私は問題のあるリポジトリのgit clone
をしなければなりませんでした、そして私は、すでにローカルに持っていてコミットを失いたくないので、別の名前に複製しなければなりませんでした。例えば
git clone ssh://git@gitServerUrl/myRepo.git myRepo2
それから私はそれを既知のホストリストに追加するためのプロンプトを得ました、質問はこれかもしれません:
接続し続けますか?(はい/いいえ)?
私は "はい"とタイプして、それはついにうまくいきました、あなたは典型的にこれと同じようなメッセージを得るべきです:
警告:既知のホストのリストに '[あなたのレポリンク]'(ECDSA)を永久に追加しました。
注:Windowsを使用している場合は、すべてのコマンドにGit Bashを使用してください。これは通常のcmdシェルまたはpowershellでは機能しませんでした。 Git Bash。
最後に2番目のクローンレポジトリ(この例ではmyRepo2
)を削除して最初のレポジトリに戻り、ついに私の大好きなエディタVSCodeでGitのすべてのことができるようになりました。
Windows用のgitを使用している場合.
GUIクライアントはあなたのキーを~/.ssh/known_hosts
に追加します。これを頻繁に行わないのであれば覚えやすく、gitコマンドラインを使用する必要もありません(標準のWindowsコマンドラインにはssh-keyscan
実行可能ファイルがありません)。
リモートサーバーがプライベートリポジトリに接続する場合、sshを介して認証されます。 ssh-keygenを使用して、または既に公開鍵と秘密鍵を持っている場合は、秘密鍵と公開鍵のペアを作成します。プライベートリポジトリの設定で公開キーをコピーして貼り付けます。
YourPrivateRepo-> Settings-> Deploy Keys-> Add deploy key-> Paste the public key。
これで、リモートサーバーはプライベートリポジトリに接続できるようになります。
注:デプロイキーには、リポジトリの読み取り専用のアクセス権があります。書き込みアクセスを明示的に許可する必要があります。
それはあなたのリモートホストキーが変更されたことを意味します(ホストパスワードの変更かもしれません)、
あなたの端末はこのコマンドを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
もう一度試してください、これがうまくいくことを願っています。
質問されたとき:
Are you sure you want to continue connecting (yes/no)?
応答としてyesと入力します。
私は自分の問題を解決しました。しかし、エンターボタンを押すだけではうまくいきません。
私は同様の問題を抱えていましたが、残念ながらGitExtensions HMIを使用してパスフレーズを書いたのを忘れていました。 HMIを使って…それを忘れないで!鍵を生成するときにパスフレーズを入力しないでください。
イメージが公開されている間に、ビルド時に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 を使用してください。
"git url"は、Jenkinsファイルの「https」URL形式で、または好きな場所で使用できます。
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'