Git 오류: 원격 저장소에 연결할 때 "호스트 키 확인 실패"
웹 서버에 있는 원격 Git 저장소에 연결하여 컴퓨터에 복제하려고 합니다.
명령에 다음 형식을 사용하고 있습니다.
git clone ssh://username@domain.example/repository.git
이것은 대부분의 팀원들에게 효과가 있었습니다.일반적으로 이 명령을 실행한 후 Git는 사용자의 암호를 묻는 메시지를 표시한 다음 복제를 실행합니다.그러나 컴퓨터 중 하나에서 실행할 때 다음 오류가 발생합니다.
호스트 키를 확인하지 못했습니다.
치명적: 원격 리포지토리에서 읽을 수 없습니다.
SSH 키를 사용하여 이 저장소에 연결하지 않기 때문에 Git가 이 특정 컴퓨터에서 SSH 키를 확인하는 이유를 잘 모르겠습니다.
이전에 Cloning git repo에서 답변했듯이 git repo로 인해 오류가 발생했습니다. fatal: 원격 종료가 예기치 않게 끊어졌습니다. GitHub을 알려진 호스트 목록에 추가합니다.
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
프로토콜을 합니다.ssh://모든 호스트는 SSH를 사용하여 키를 가집니다.클라이언트는 특정 주소와 연결된 호스트 키를 기억하고 호스트 키가 변경되는 것처럼 보일 경우 연결을 거부합니다.이것은 중간에 사람이 공격하는 것을 방지합니다.
의 호스트 키:domain.example변했다.이것이 수상하다고 생각되지 않는 경우, 편집하여 로컬 캐시에서 이전 키를 제거합니다.${HOME}/.ssh/known_hosts의 domain.example하여 SSH 유틸리티를 .
ssh-keygen -R domain.example
여기서 업데이트된 키를 직접 기록합니다.
ssh-keyscan -t rsa domain.example >> ~/.ssh/known_hosts
또는 동등하게, 다음과 같이.ssh다음에 연결할 때 해주세요.git fetch,git pull또는git push 올' (또는평 올한범올''또한 ').ssh domain.example)라는가 나타나면 라고 대답합니다
호스트 'domain.example(a.b.c.d)'의 신뢰성을 설정할 수 없습니다. RSA 키 지문은 XX:XX:...:XX.계속 연결하시겠습니까(예/아니오)?
는 이표프는이유입니다.domain.example더 이상 당신의 것이 아닙니다.known_hosts 후 제한후 없을수에있습다니도에 수 ./etc/ssh/ssh_known_hosts,그렇게ssh연결의 다른 쪽 끝에 있는 호스트가 정말인지 여부를 알 수 있는 방법이 없습니다.domain.example)/etc관리 권한이 있는 사용자는 시스템 전체 파일을 업데이트해야 합니다.)
사용자가 키를 사용하여 인증하는 것도 고려해 볼 것을 강력히 추천합니다.그와 같이,ssh-agent은(는) 모든 사용자가 서버에 연결할 때마다 암호를 입력할 필요 없이) 편의를 위해 키 자료를 저장할 수 있으며 암호는 네트워크를 통해 전달되지 않습니다.
저도 비슷한 문제가 있었지만, SSH 키를 사용했습니다.위의 Tupy의 답변을 통해 knowledge_hosts 파일이 없거나 알려진 호스트 목록에 github.com 이 없는 것이 문제라는 것을 알게 되었습니다.다음은 제가 이 문제를 해결하기 위해 수행한 단계입니다.
mkdir -p ~/.sshssh-keyscan -t rsa github.com >> ~/.ssh/known_hostsssh-keygen -t rsa -C "user.email"- 키를 엽니다.
$ cat ~/.ssh/id_rsa.pub그리고 그것을 복사합니다. - GitHub 프로파일의 SSH 키 목록에 id_rsa.pub 키를 추가합니다.
github이 현재 알려진 호스트에 없기 때문에 이 문제가 발생합니다.
알려진 호스트에 github을 추가하라는 메시지가 표시됩니다.만약 이런 일이 일어나지 않았다면, 당신은 도망갈 수 있습니다.ssh -T git@github.com확인 메시지를 다시 수신합니다.
저는 Enter 키를 누르는 대신 "연결을 계속하시겠습니까(예/아니오)?"라는 메시지가 나타나면 "예"를 입력해야 했습니다.
항상 방화벽에 의해 보호되는 사무실 인트라넷(그렇지 않으면 위험)에 있는 경우 다음 행을 사용하면 됩니다.~/.ssh/config.
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
질문 시:
Are you sure you want to continue connecting (yes/no)?
응답으로 yes를 입력합니다.
그것이 제가 제 문제를 해결한 방법입니다.하지만 엔터 버튼을 누르려고만 하면 작동하지 않습니다!
새로 설치한 시스템에서도 동일한 문제가 발생했지만, 이것은 udev 문제였습니다. ./dev/tty노드, 그래서 나는 해야만 했습니다:
mknod -m 666 /dev/tty c 5 0
저는 먼저 새 컴퓨터의 SSH 키를 추가한 후 GitLab의 지침에 따라 SSH 키를 추가했습니다.Win10에 있기 때문에 Windows의 Git Bash에서 이 모든 명령을 수행해야 했습니다(일반 DOS cmd Shell에서는 작동하지 않았습니다).
그리고 Git Bash에서, 나는 해야만 했습니다.git clone문제가 있는 레포의 경우 이미 로컬에 있으며 커밋을 손실하고 싶지 않기 때문에 다른 이름으로 복제해야 했습니다.를 들어 를들면입니다.
git clone ssh://git@gitServerUrl/myRepo.git myRepo2
그런 다음 알려진 호스트 목록에 추가하라는 메시지가 표시됩니다. 질문은 다음과 같습니다.
계속 연결하시겠습니까(예/아니오)?
"예"를 입력했는데 마침내 작동했습니다. 일반적으로 다음과 유사한 메시지가 표시됩니다.
경고: 알려진 호스트 목록에 '[your repo link](ECDSA)'가 영구적으로 추가되었습니다.
참고: Windows에 있는 경우 모든 명령에 Git Bash를 사용해야 합니다. 일반 cmd 셸이나 파워셸에서는 작동하지 않았습니다. Git Bash에서 이 작업을 수행해야 했습니다.
으로 두 repo를 했습니다.myRepo2예에서는) 그리고 첫 번째 레포로 돌아갔고 마침내 제가 좋아하는 편집기 VSCode에서 일반적인 Git 작업을 모두 수행할 수 있었습니다.
원격 서버가 개인 repo에 연결하려고 할 때 ssh를 통해 인증됩니다.ssh-keygen을 사용하여 개인 키-공개 키 쌍을 생성하거나 공용 키가 이미 있는 경우 생성합니다.개인 저장소의 설정에서 공용 키를 복사하여 붙여넣습니다.
개인 보고서 -> 설정 -> 배포 키 -> 배포 키 추가 -> 공용 키를 붙여넣습니다.
이제 원격 서버가 개인 저장소에 연결할 수 있습니다.
참고: 배포 키는 보고서를 읽기 위해서만 액세스할 수 있습니다.쓰기 액세스를 명시적으로 허용해야 합니다.
Windows용 Git를 사용하는 경우.
- Git GUI를 엽니다.
- 로컬 git 저장소 git GUI를 엽니다.
- 리모컨을 추가하거나 리모컨이 이미 있는 경우 푸시합니다.
- 계속할지 여부에 대한 질문에 "예"라고 대답합니다.
를 위한 에 추가합니다.~/.ssh/known_hosts 명령줄을 할 수 git 이기자표않명령고사줄을용필다경우할는쉽기기없니습억하음없요가능이준명령은줄주사용하지표it▁this▁the(다the'▁have쉽니▁(습▁if▁windowsit▁line).ssh-keyscan실행 가능한
여기서 언급한 솔루션은 훌륭합니다. 유일하게 누락된 점은 공용 및 개인 키 파일 이름이 기본 파일 이름과 다를 경우 어떻게 해야 한다는 것입니다.
~/.ssh 아래에 "config"라는 파일을 만들고 다음 내용을 추가합니다.
Host github.com
IdentityFile ~/.ssh/github_id_rsa
를 바꿉니다.github_id_rsa개인 키 파일을 사용합니다.
터미널에 다음이 표시될 때:
Are you sure you want to continue connecting (yes/no)?
반복 안 함 직접 누르지 않음Enter.
입력해야 합니다. yes먼저 터미널에서 다음을 누릅니다.Enter.
이미지가 공개된 상태에서 빌드 시간 동안 DockerFile 내부에서 동일한 오류가 발생했습니다.저는 도커 파일에서 수정을 거의 하지 않았습니다.
RUN git clone https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs
이는 git@github.com 을 사용하기 때문일 수 있습니다.구문은 > SSH를 사용하여 복제하고, 컨테이너 내부에서는 개인 키를 > 사용할 수 없습니다.대신 RUNgit clone > https://github.com/edenhill/librdkafka.git 을 사용하는 것이 좋습니다.
known_hosts 파일(~/.ssh/known_hosts)과 글로벌 파일(/etc/ssh/ssh_known_hosts)에 대한 사용 권한도 확인합니다.
제 경우 이전 호스트가 /etc/ssh/ssh_known_hosts에 있었습니다. 때을했거트로 루트로 때.sudo ssh-keygen -f /etc/ssh/ssh_known_hosts -R THE_HOST해당 파일에 대한 사용 권한을 0600으로 변경하여 루트로 THE_HOST에 대한 SSHing이 작동했지만 다른 사용자의 경우 "호스트 키 확인 실패"로 실패했습니다.수정 사항:
sudo chmod 644 /etc/ssh/ssh_known_hosts
Tupy의 답변에 약간 더하면 리포지토리 호스트의 포트 번호를 추가해야 할 수도 있습니다.
ssh-keyscan -p 8888 -t rsa domain.example >> ~/.ssh/known_hosts
원격 액세스 권한이 있는 다른 시스템이 있는 경우 ~/.ssh/known_hosts를 확인하여 포트 번호를 찾을 수 있습니다.
[user]$ less ~/.ssh/known_hosts
[domain.example]:8888,[000.00.000.000]:8888 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCi...
Jenkins 파일 또는 원하는 곳에서 "giturl"을 'https' URL 형식으로 사용할 수 있습니다.
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
원격 호스트 키가 변경되었음을 의미합니다(호스트 암호 변경일 수 있음).
터미널에서 이 명령을 루트 사용자로 실행하도록 제안했습니다.
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]
PC/서버의 호스트 목록에서 해당 호스트 이름을 제거해야 합니다.제안된 명령을 복사하여 루트 사용자로 실행합니다.
$ 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
다시 시도해 보십시오. 효과가 있기를 바랍니다.
git clone 또는 git pull 또는 git push에 대해 ssh 대신 https를 사용할 수 있습니다.
ex:
git clone https://github.com/user/repo.git
이유는 원격 호스트의 공용 키가 저장되지 않았거나 저장된 키와 다르기 때문인 것 같습니다. (보안 문제에 주의, 자세한 내용은 Greg Bacon의 답변 참조)
나는 익숙했습니다.git clone이 경우에는 다음과 같은 메시지가 표시됩니다.
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 SSH 명령의 구성일 수 있습니다.
어쨌든 실행하면 동일한 프롬프트를 얻을 수 있습니다.ssh user@host.net.
SSH 링크를 복제하는 대신 다른 방법이 사용되었습니다.
git@gitlab.company.net:upendra/mycode.git
http 링크를 선택하는 옵션이 있습니다.
http://gitlab.company.net:8888/upendra/mycode.git
그래서 저는 Visual 스튜디오를 위해 http 링크를 사용하여 복제했습니다.
를 업데이트하지 를 사용하는 PortableGit은 야해합니다설을 .HOMEPATH명령을 .git 명령을 실행합니다.
이 예제는 다른 사용 사례에 더 적합하지만, 저는 이 게시물에 대한 개념 증명이 좋다고 생각합니다.
$env:HOMEPATH="\Users\Administrator";C:\path\to\PortableGit\bin\git.exe -C C:\path\to\repository.git pull'
Git에 푸시 중 오류 코드 403을 반환합니다. HTTP 요청 실패
Billing 문제가 있는지 확인합니다.Google Cloud가 https://source.cloud.google.com/ 에 파일 업로드를 중지합니다.
저는 Payment 이슈가 수정된 후에 이 문제가 해결되었습니다.그러나 키는 변경하지 않았습니다.
감사해요.
대시보드 > 관리 젠킨스 > 글로벌 보안 구성 > Git 호스트 키 확인 구성.그런 다음 호스트 키 확인 전략에서 첫 번째 연결 수락을 선택합니다.
저는 방금 제가 알고 있는 호스트 파일을 지웠는데 그것이 효과가 있는 것 같았습니다.
또는 MSYS2 터미널(Windows*의 경우)과 암호를 사용하는 경우 터미널에서 '암호 입력' 메시지를 제대로 표시하지 않아 SSH에 대한 액세스가 거부될 수 있습니다.
Windows(윈도우)를 사용하는 경우 대신 Git Bash 또는 Powershell을 사용하여 프롬프트를 표시하고 올바르게 연결할 수 있습니다. (현재 MSYS용 솔루션을 찾고 있습니다.)
*관련성이 있는지 확실하지 않음.
문제:호스트 키를 확인하지 못했습니다.치명적: 원격 리포지토리에서 읽을 수 없습니다.
올바른 액세스 권한이 있고 리포지토리가 있는지 확인하십시오.
솔루션:나는 GitHub의 모든 설정과 키 설정을 확인했습니다.마지막으로 Git URL을 변경했습니다."git@github.com:palvsv/travelo-moon.git""https://github.com/palvsv/travelo-moon.git".config 파일"yourprojectdirectory/.git/config"그리고 그것은 동작한다.
백업을 위해 "known_hosts" 파일 이름을 "known_hosts.del"로 변경한 다음 git clone xxx를 다시 실행하고 "yes"를 입력합니다.새 "known_hosts"를 생성합니다.
초보자의 경우 위에서 언급한 작업을 수행하기 전에 다음 명령을 사용하여 Jenkins에 로그인해야 합니다.
sudo su - jenkins
이것은 저에게 효과가 있었습니다.
냥입 력그를 입력하세요.'yes'그리고 Enter 키를 누르면 이것이 작동합니다.
언급URL : https://stackoverflow.com/questions/13363553/git-error-host-key-verification-failed-when-connecting-to-remote-repository
'programing' 카테고리의 다른 글
| "이 작업을 수행하려면 Ruby 및 Sass가 설치되어 있고 PATH에 있어야 합니다." 경고를 해결하는 방법은 무엇입니까? (0) | 2023.05.11 |
|---|---|
| Python 3.1에서 문자열의 HTML 엔티티를 이스케이프 해제하려면 어떻게 해야 합니까? (0) | 2023.05.11 |
| IN 절(NULL 또는 IS NULL) (0) | 2023.05.11 |
| Git에서 단계별 변경 사항만 저장하는 방법은 무엇입니까? (0) | 2023.05.11 |
| 명령줄 매개 변수에서 "-"(대시)의 마법은 무엇입니까? (0) | 2023.05.11 |