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.