XX.XXX.XX.XX와 (과) 협상 할 수 없습니다. 일치하는 호스트 키 유형이 없습니다. 그들의 제안 : ssh-dss


110

내 웹 호스트에 git 저장소를 만들고 내 컴퓨터에 복제하려고합니다. 내가 한 일은 다음과 같습니다.

  1. 원격 서버에 저장소를 만들었습니다.
  2. 키 쌍을 생성했습니다 : ssh-keygen -t dsa.
  3. ssh-agent에 키를 추가했습니다.
  4. .NET의 서버 공개 키에 복사했습니다 ~/.ssh.

그런 다음 명령을 실행하려고 시도 git clone ssh://user@host/path-to-repository하면 오류가 발생합니다.

XX.XXX.XX.XX와 (과) 협상 할 수 없습니다. 일치하는 호스트 키 유형이 없습니다. 그들의 제안 : ssh-dss
치명적 : 원격 저장소에서 읽을 수 없습니다.
올바른 액세스 권한이 있고 저장소가 있는지 확인하십시오.

그게 무슨 뜻입니까?


답변:


171

최신 openssh 버전은 기본적으로 더 이상 사용되지 않는 DSA 키입니다. GIT 공급자에게 합리적인 호스트 키를 추가하도록 제안해야합니다. DSA에만 의존하는 것은 좋은 생각이 아닙니다.

해결 방법 으로 기존 사용ssh 에 대한 공식 문서에 설명 된대로 DSA 호스트 키를 수락하겠다고 클라이언트 에 알려야합니다 . 가능성은 거의 없지만 ~/.ssh/config파일에 다음 줄을 추가하는 것이 좋습니다 .

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

다른 가능성은 환경 변수 GIT_SSH를 사용하여 다음 옵션을 지정하는 것입니다.

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository

1
이제 호스트 이름을 지정하지 않고 HostkeyAlgorithms +ssh-dss. 감사.
giovannipds

1
@giovannipds 확실히 연결하려는 원격 호스트 여야합니다. @ downvoters downvotes를 설명하는 것이 좋을 것입니다.
Jakuje

@Jakuje 미안한 사람, 내가 잘못 클릭했으며 즉시 변경할 수 없기 때문에 내 대답을 업데이트 할 수 없습니다.
giovannipds

1
@Jakuje 나는 당신에게 알리기 위해 이미 내 투표를 업데이트했습니다. =)
giovannipds

.ssh 디렉토리에 이러한 파일이 없으면 "config"라는 이름의 빈 텍스트 파일이 작동합니다.
RMorrisey

78

-oHostKeyAlgorithms=+ssh-dssssh 줄에 추가 할 수도 있습니다 .

ssh -oHostKeyAlgorithms=+ssh-dss user@host

이는 해당 호스트의 문제를 영구적으로 해결하기 때문에 가장 빠른 솔루션 +1입니다. 장기적인 제안 중 하나는 가능하다면 호스트 시스템이 DSS처럼 보이기 때문에 SSH 데몬을 업그레이드해야한다는 것입니다.
Areeb Soo Yasir

20

나를 위해 이것은 일했습니다 : (에 추가됨 .ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss

두 번째 옵션은 문제와 관련이 없으며 첫 번째 옵션은 이미 내 대답에 언급되어 있습니다.
Jakuje 2016 년

your-host가 (클라이언트)에서 ssh 명령을 실행중인 호스트의 이름 인 경우 호스트 호스트가 나를 위해 작동하지 않았습니다. 그러나 Host *는 나를 위해 일했습니다.
Krischu 2016

2
@Krischu no, yuor-host당신이 상대하는 호스트 ssh입니다. 모든 호스트에 대해 안전하지 않은 기본값을 설정하는 것은 항상 나쁜 생각입니다.
Jakuje

10

당신이 저와 같고이 보안 허점 시스템 또는 사용자 전체를 만들지 않으려면 해당 저장소에서이 명령을 실행하여이를 필요로하는 모든 git 저장소에 구성 옵션을 추가 할 수 있습니다. (참고는 2016-09-04 출시 된 git 버전> = 2.10에서만 작동합니다.)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

그러나 이것은 repo가 ​​설정된 후에 만 ​​작동합니다. 원격을 수동으로 추가하는 것이 불편하고 복제하려는 경우 다음과 같이 복제를 실행할 수 있습니다.

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository

그런 다음 첫 번째 명령을 실행하여 영구적으로 만드십시오.

최신 정보가 없는데도 구멍을 가능한 한 지역적으로 유지하고 싶다면

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

파일 어딘가에서, 말을 git_ssh_allow_dsa_keys.sh하고, source필요할 때를 보내고.


3

서버 측 솔루션과 약간 협력하고 싶습니다. 따라서 서버는 openssh 클라이언트가 기본적으로 활성화하지 않기 때문에 DSA를 지원하지 않는다고 말합니다 .

OpenSSH 7.0 이상은 유사하게 ssh-dss (DSA) 공개 키 알고리즘을 비활성화합니다. 너무 약해서 사용하지 않는 것이 좋습니다.

따라서이 문제를 서버 측에서 수정하려면 RSA o ECDSA와 같은 다른 키 알고리즘을 활성화해야합니다. 나는 방금 LAN의 서버 에서이 문제가 발생했습니다. 다음을 제안합니다.

openssh를 업데이트합니다.

yum update openssh-server

sshd_config.rpmnew가있는 경우 sshd_config에서 새 구성을 병합합니다.

/ etc / ssh /에 호스트 키가 있는지 확인합니다. 새 항목을 생성하지 않는 경우을 참조하십시오 man ssh-keygen.

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_host_rsa_key.pub

/ etc / ssh / sshd_config에서 HostKey 구성을 확인합니다. RSA 및 ECDSA의 구성을 허용해야합니다. (기본적으로 모두 주석 처리 된 경우 RSA도 허용됩니다 man sshd_config. HostKey 부분 참조 ).

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

클라이언트 측의 경우 다음을 수행하여 ssh (질문과 같은 DSA가 아님)에 대한 키를 만듭니다.

ssh-keygen

이후에는 ssh-dss (DSA)보다 더 많은 옵션이 있으므로 클라이언트 openssh (> = v7)는 RSA 또는 더 나은 알고리즘으로 연결해야합니다.

여기 또 다른 좋은 기사.

이것은 내 첫 번째 질문에 대한 답변이며 제안을 환영합니다 : D.


1

여러 알고리즘을 어떻게 지정합니까? git이 내 업무용 랩톱에서 방금 업데이트했기 때문에 (Windows 10, Windows 용 공식 Git 빌드 사용), 프로젝트 분기를 Azure DevOps 원격으로 푸시하려고 할 때이 오류가 발생했습니다. 나는 --set-upstream을 밀려 고 시도했고 이것을 얻었다 :

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

그렇다면 위의 제안을 두 가지 모두 허용하는 방법은 무엇입니까? (빠른 작업으로 @golvok의 솔루션을 group14와 함께 사용했는데 효과가 있었지만 1 또는 14가 더 나은지 여부 등을 알 수 없습니다.)


-3

위의 접근 방식 또는이 방법을 따르십시오.

.ssh 디렉토리에 구성 파일을 만들고 다음 줄을 추가합니다.

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

그것은 완전히 다른 문제를 해결하는 것입니다.
Jakuje 2017-06-19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.