SSH 문제 : 소켓에서 읽지 못했습니다 : 피어에 의한 연결 재설정


14

서버 중 하나에서 OpenSSH_6.6p1을 컴파일했습니다. SSH를 통해 업그레이드 된 서버에 로그인 할 수 있습니다. 그러나 OpenSSH_6.6p1 또는 OpenSSH_5.8을 실행하는 다른 서버에는 연결할 수 없습니다. 연결하는 동안 아래와 같이 오류가 발생합니다.

Read from socket failed: Connection reset by peer

로그의 대상 서버에서 아래와 같이 표시됩니다.

sshd: fatal: Read from socket failed: Connection reset by peer [preauth]

여기에 언급 된대로 cipher_spec [ssh -c aes128-ctr destination-server]를 지정하려고 시도 했으며 연결할 수있었습니다. 기본적으로 암호를 사용하도록 ssh를 구성하는 방법은 무엇입니까? 여기에서 암호가 필요한 이유는 무엇입니까?


이 오류가 발생한 서버에서 수행하면 어떻게됩니까 telnet ip.or.name.of.offending.server 22?
MadHatter

1
양쪽은 상대방이 연결을 닫았다 고 생각하는 것 같습니다. 이 시점에서 나는 tcpdump 또는 wireshark를 분리하고 양쪽 끝에서 실행합니다.
Michael Hampton

@MadHatter 포트 22에서 텔넷을 사용하고 SSH 응답을 얻을 수 있습니다.
nitins

6.5p1과 같은 이전 버전의 openssh를 컴파일하여이 동작이 코드베이스의 변경으로 인한 것인지 확인하십시오.

답변:


7

이 문제는 서버 측 버그처럼 들립니다. 클라이언트가 암호 목록을 보내면 openssh 서버는 단일 시스템 호출로 목록을 읽을 수있을 것으로 예상합니다.

지원되는 암호 목록이 한 패킷으로 전송 될 수있는 것보다 긴 경우 서버는 첫 번째 호출에서 예상보다 적은 바이트를 얻을 수 있습니다. 서버에서 올바른 동작은 나머지 바이트를 얻기 위해 다른 호출을 수행하는 것입니다. 그러나 문제 설명에서 서버는 전체 암호 목록을 한 번에 얻지 못하면 연결을 닫습니다. 클라이언트에서 다음 패킷이 도착하면 서버는 클라이언트에게 연결 재설정을 보냅니다.

짧은 암호 목록을 사용하도록 클라이언트를 구성하면 버그를 해결할 수 있습니다. openssh 클라이언트는 다음 위치에서 암호 목록을 찾습니다.

  1. -c cipher_spec 또는 -o Ciphers = cipher_spec을 사용하여 명령 행에서
  2. ~ / .ssh / config에서 관련 호스트 섹션에서 또는 첫 번째 호스트 이전에 cipher_cipher_spec을 지정하십시오.
  3. ~ / .ssh / config와 동일한 형식을 사용하는 / etc / ssh / ssh_config에서
  4. 컴파일 타임에 클라이언트에 내장 된 기본 목록입니다.

두 구성 파일은 각각 사용자 및 시스템 전체 설정입니다. 사용 Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc에릭 같은 것은 잘 작동합니다 제안했다.


이 버전의 openssh에서 알려진 결함입니까? 누구 든지이 문제에 대해 openssh 버그 추적기에 대한 링크가 있습니까?
user313114

1
@ user313114이 답변이 작성된 3 년 전에 버그가 이미 최신 버전에서 수정되었다고 생각하기 때문에 그러한 추적 프로그램을 찾지 못했습니다.
kasperd

4

ssh 구성 파일에서 암호를 지정할 수 있습니다 (/ etc / ssh / ssh_config 또는 유사, $ PREFIX 등에 따라 다름). 명령 행에서 ssh client에 전달하는 모든 옵션은 ssh (client) 구성 파일에서 설정할 수 있습니다.

다음은 관련 줄입니다 (단지 주석 해제).

#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

3

그것을 고치는 내 길은 누군가를 돕기를 바랍니다.

# Recreate host keys
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A

# Re-install SSh
sudo apt-get --reinstall install openssh-server openssh-client

값을 추가하여 sshd_config 편집

add :  MaxAuthTries 3

주석 처리를 제거하여 ssh_config 편집

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

0

아래의 파일 권한을 600으로 수정하여이 문제를 해결했습니다.

/ etc / ssh / ssh_host_dsa_key
/ etc / ssh / ssh_host_rsa_key
/ etc / ssh / ssh_host_ecdsa_key

또한 '/ etc / ssh /'내의 다른 모든 파일에 대한 권한을 644로 수정했습니다. 모든 파일 파일은 'root'가 소유해야합니다.

다음은 '/ etc / ssh'디렉토리에있는 모든 파일에 대한 적절한 권한을 지정하기위한 전체 명령 세트입니다.

chown 루트 : root / etc / ssh / * chmod 644 / etc / ssh / *
chmod 600 / etc / ssh / ssh_host_dsa_key
chmod 600 / etc / ssh / ssh_host_rsa_key
chmod 600 / etc / ssh / ssh_host_ecdsa_key


-1

똑같은 증상을 보이는 내 문제는 잘린 호스트 키 때문이었습니다. 다음을 사용하여 다시 작성하십시오.

sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.