SSH를 사용할 수 없음 : debug1 : SSH2_MSG_KEX_DH_GEX_REPLY 예상


24

Amazon EC2에 서버 XXX가 있습니다.

SSH가 표준 (22) 포트에서 실행 중입니다.

pubkey를 /.ssh/authorized_keys 파일에 넣었습니다.

재미있는 것은 어제 그것이 잘 작동했다는 것입니다!

그러나 오늘, 나는 무슨 일이 있었는지 모른다! 그냥 로그인 할 수 없습니다.

ssh -vvvv 서버 이름

붙어있다

debug1 : SSH2_MSG_KEX_DH_GEX_REPLY 예상

나는 나의 pubkey를 점검했다. (내가 확인한 방법 ?? 다른 사람에게 확인을 요청했다)

그런 다음 다른 컴퓨터 (Windows 7 + 퍼티)를 사용하여 새 pubkey를 배치했습니다. 그리고 뭐? 로그인 할 수있었습니다! 그리고 Win7이 설치된 다른 컴퓨터는 외부 IP가 동일하다는 것을 나타내는 동일한 LAN에 있습니다.

내 개인 키는 다른 서버에서는 작동하지만 이것과는 작동하지 않습니다.

도와주세요!


나는 새로운 키를 생성하고 새로운 pubkey를 저장했다. 하아!
— bakytn

참고로, 문제는 pubkey 인증과 관련이 없습니다. DH 키 교환 ( SSH2_MSG_KEX_DH_GEX_REPLY)은 연결에서 훨씬 일찍 발생합니다.
— grawity

정보 감사합니다. BTW GUYS, 문제 자체가 해결되었습니다. 아무것도 로그인하지 않았고 성공했습니다. HAH
— bakytn

네트워크 대기 시간이 좋지 않습니까? 많은 방울? 그냥 정상적인 메시지입니다.
— Korjavin Ivan

아마 그렇습니다. 나는 이제 어떤 식 으로든 그것을 재생할 수 없습니다. 그래서 내 편에서 할 수 있습니다.
— bakytn

답변:


28

네트워크 인터페이스 MTU를 변경하여 해결하십시오. 이것은 우분투 14.04의 버그입니다.

이것은 나를 위해 일했다 :

sudo ip li set mtu 1200 dev wlan0

또는

sudo ifconfig wlan0 mtu 1200

ssh가 VPN 호스트에 연결하지 못합니다- 'SSH2_MSG_KEX_ECDH_REPLY가 예상됩니다'


sudo ip li set mtu 1400 dev eno1우분투 16.04에서 나를 위해 일했습니다.
— Márcio

정말 고맙습니다. 몇 주 동안 특정 상자에 SSH 또는 원격 데스크톱을 연결할 수 없었습니다. HTTP가 작동하고 인접한 시스템이 제대로 작동합니다. 나는 다른 기계에서 뛰어 들어야했다.
— duckbrain

12

online.net 데이터 센터의 전용 서버에 액세스하는 것과 동일한 정확한 문제가 있습니다.

재부팅 후 문제가 없으며 MTU를 변경할 필요가 없으며 ssh 연결은 1 ~ 3 주 동안 작동 한 다음 KEXINIT를 차단하는 똑같은 버그가 나타나고 더 이상 ssh 서버에 연결할 수 없습니다.

그것은 일종의 sshd 버그 일 수 있지만 반드시 1 ~ 3 주 후에 발생하는 일부 nework로 인해 발생합니다.이 네트워크의 많은 다른 서버 에서이 정확한 문제를 여러 번 재현했습니다. 일부 DPI 옵션과 관련이있을 수 있습니다.

이 문제는 다른 데이터 센터에서 관리하는 다른 서버에서는 발생하지 않았으며 정확히 동일한 배포, 구성 및 sshd 버전이 있습니다.

데이터 센터 방화벽 (또는 다른 네트워크 조정)이 이상한 일을하고 있기 때문에 10 일마다 재부팅하지 않으려는 경우 :

먼저 해당 클라이언트 측 해결 방법 중 하나와 연결하십시오.

해결 방법 1, 로컬 클라이언트 측 MTU 낮추기 :

ip li set mtu 1400 dev wlan0

(1400이면 충분하지만 필요한 경우 더 낮은 값을 사용하려고 할 수 있습니다)

해결 방법 2, ssh 연결을 위해 선택한 사이퍼를 지정합니다.

ssh -c aes256-gcm@openssh.com host

(또는 다른 사용 가능한 사이퍼로 시도하십시오)

이 두 가지 클라이언트 측 해결 방법으로 인해 문제가 해결되었습니다. 가동 시간을 연결하고 절약 할 수있었습니다. 그러나이 서버 측을 영원히 고치려고하므로 모든 클라이언트에게 로컬로 MTU를 조정하도록 요구하지 않아도됩니다.

젠투에서 방금 추가했습니다.

mtu_eth0="1400"

/etc/conf.d/net에

(선호하는 배포 네트워크 구성 파일 어딘가에 동일한 mtu 옵션을 사용할 수 있어야합니다)

나는 mtu를 1400으로 설정했지만 대부분의 경우 1460으로 충분합니다.

또 다른 도움이되는 해결책은 다음 iptables 규칙을 사용하여 조각화를 관리하는 것입니다.

# / sbin / iptables -I 출력 -p tcp --tcp-flags SYN, RST SYN -j TCPMSS --clamp-mss-to-pmtu

# / sbin / ip6tables -I 출력 -p tcp --tcp-flags SYN, RST SYN -j TCPMSS --clamp-mss-to-pmtu

(그러나 나는 지금 까지이 것을 필요로하지 않았다)

또한이 문제의 증상은 다음과 같습니다.

debug1: SSH2_MSG_KEXINIT sent

뿐만 아니라

debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY

행진 편집 2016 :

  • 서버에서 mtu를 1400으로 낮추는 것이 가장 효과적이지만 최근에는 서버에서 mtu가 이미 1400으로 낮추어 문제가 다시 나타 났으며 클라이언트도 mtu를 1400으로 낮추어야했습니다.

  • "서버가 연결을 재설정했습니다"라고 말할 때까지 페이지가 다시로드되기를 기다리는 웹 로그인 양식에도 문제가 나타 났으며 클라이언트가 mtU를 1400으로 설정 한 후에도 해결되었습니다.

    관련된 링크들 :

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1254085

http://www.held.org.il/blog/2011/05/the-myterious-case-of-broken-ssh-client-connection-reset-by-peer/

https://nowhere.dk/articles/natty-narwhal-problems-connecting-to-servers-behind-cisco-firewalls-using-ssh

/programming/2419412/ssh-connection-stop-at-debug1-ssh2-msg-kexinit-sent

http://www.1-script.com/forums/ssh/ssh-hang-after-ssh2-msg-kexinit-sent-10616-.htm

http://www.snailbook.com/faq/mtu-mismatch.auto.html


이것은 특히 클라이언트쪽에 매우 작은 소형 MTU가있는 경우 발생할 수 있습니다. 예를 들어 이중 NAT 네트워크에서 openvpn을 사용하려고합니다.
— Dennis Nolte

이 문제가 발생하기 전에 기본 mtu 값을 사용하여 mtu를 낮추는 것이 문제가 아니라 해결책이었습니다. 귀하의 의견을 설명하십시오.
— neofutur

9

제 경우에는 MTU 크기를 줄일 권한이 없습니다. 암호를 수동으로 지정해도 작동하지 않습니다.

MAC 목록을 단축 한 후 연결할 수 있습니다. 예 :

ssh -o MACs=hmac-sha2-256 <HOST>

나는 그것이 MTU가 아닐 것이라는 것을 알았습니다. 누군가 서버 쪽에서 MTU를 망친 경우 네트워크 처리량에 영향을 줄 수 있습니다. 문제는 OpenSSH의 버전 차이와 특정 암호 및 MAC 기능 조합을 선호하는 방식이어야합니다.
— Csaba Toth




-1

/ etc / ssh / ssh_config에서 Ciphers 라인을 주석 처리하여 해결했습니다.


-2

퍼티가 키 교환을 협상하고 문제가 해결되는 순서를 변경했기 때문에 옵션 대화 상자가 문제를 일으키는 것은 분명합니다.


1
무엇이 분명해 보이는가? 이 질문은 4 년 전에 답변되었습니다.
— David Makogon

-3

cmiiw

  • ~ / .ssh / authorized_keys 권한을 확인하십시오. 600이어야합니다.

  • / var / log / secure, / var / log / messages 또는 / var / log / auth를 확인하십시오.


authorized_keys권한은 클라이언트가 이전 프로토콜 negitioation을 duing 붙어 있기 때문에 오류와는 아무 상관이있다. 서버 측 로그를 확인하면 도움이 될 수 있지만이 줄은 주석입니다.
— try-catch-finally
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.