ssh_exchange_identification : 원격 호스트에 의해 연결이 종료되었습니다 (hosts.deny를 사용하지 않음)


74

하지 를 사용 hosts.allow하거나 hosts.deny, 더 많은 SSH 내 창 기계 (같은 노트북, 다른 하드 드라이브)하지만 내 리눅스 머신에서 작동합니다.

ssh -vvv root@host -p port 제공합니다 :

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

Windows 컴퓨터에서는 모든 것이 잘 작동하므로 보안 로그를 확인하고 그 줄이 동일한 지, 서버는 서로 다른 두 "기계"를 다르지 않으며 공개 키 인증을 통해 둘 다 허용됩니다.

따라서 이것이 내 로컬 ArchLinux 랩톱에 문제가 있어야한다는 결론으로 ​​이어집니다. 그러나 무엇?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

그래서 그것은 문제가 아닙니다 ..

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

방화벽 설정과 충돌하지 않습니다 (현재).

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

권한은 문제가없는 것 같습니다 (서버와 동일). /etc/ssh/ssh_config동일한 오류로 끝나는 클라이언트에서 많은 자동 구성이 진행되는 것을 제외하고는 동일한 결과로 구성하지 않고 시도했습니다 .


iptables-save|grep -v '^#'의 다른 출력물 (예 : natmangle)을 포함하는 의 출력물을 제공하십시오 . 비어있는 경우 간단히 설명하십시오. iptables위 의 출력은 기본적으로 filter테이블로 제한됩니다 . 또한 SSH 서버에서 이와 같은 대체 포트에서 SSH를 실행 하고 디버그 출력을 제공하십시오.
0xC0000022L

@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609dgist.github.com/Torxed/1fd9b5b0c276629caf30 및 방화벽과 관련하여 SSH는 내 Windows 드라이브 (다시 말하면 동일한 노트북 ergo mac 및 IP)에서 작동하지만 내 리눅스 디스크에서는 작동하지 않습니다.
Torxed

두 가지 더. 대체 포트에서 인스턴스에 연결해야합니다. 그렇지 않으면 가능한 문제를 볼 수 없습니다. Windows vs. Linux와 관련하여 IPv6을 사용하는 것 중 하나 ip6tables-save입니까 ( )?
0xC0000022L

@ 0xC0000022L 정말 죄송합니다. 잘못된 IP에 연결했습니다. 포트 8080에서 SSH를 실행하기 때문에 포트 8080에서 웹 캐시를 실행하는 호스트에 연결할 때이 문제가 발생했습니다.> _ <
Torxed

1
sshd를 무차별 공격하려는 임의의 공격자가 내 서버를 때리는 동안 간헐적으로 이런 일이 발생했습니다. 방화벽 규칙을 추가하여 공격자와의 연결을 끊습니다.
Andrew Hows

답변:


60

"외부"요인을 배제한 경우 다음 단계는 일반적으로 범위를 좁히는 데 도움이됩니다. 따라서 귀하의 질문에 직접 답변하지는 않지만 오류 원인을 추적하는 데 도움이 될 수 있습니다.

문제 해결 sshd

그러한 경우에 일반적으로 매우 유용한 sshd것은 데몬을 사용하지 않고 시작 하는 것입니다. 내 경우의 문제는 의미있는 syslog것도 auth.log보여 주지도 않았다 .

터미널에서 시작했을 때 나는 얻었습니다.

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

훨씬 낫다! 이 오류 메시지를 통해 무엇이 잘못되었는지 확인할 수있었습니다. 로그 파일 중 어느 것도이 출력을 포함하지 않았습니다.

NB : 적어도 우분투에서는 절대 경로의 요구 사항 $(which sshd)을 충족시키는 가장 좋은 방법 sshd입니다. 그렇지 않으면 다음 오류가 발생 sshd re-exec requires execution with an absolute path합니다.. -p 10222차종은 sshd잠재적으로 실행에 충돌하지 않도록 이것이다 - 구성 파일을 무시하고 그 대안 포트에서 수신 대기 sshd인스턴스. 여기에서 빈 포트를 선택하십시오.

마지막으로 : 대체 포트 ( ssh -p 10222 user@server)에 연결하십시오 .

이 방법은 인증 문제 또는 다른 유형과 같은 문제를 찾는 데 여러 번 도움이되었습니다. 에 대한 자세한 정보를 얻으려면을 stdout사용하십시오 $(which sshd) -Ddddp 10222(추가 dd정보를 표시하여 자세한 정보 표시). 더 좋은 디버깅 확인을 위해 man sshd.


잘못된 IP에 연결했지만이 문제가 해결되었습니다. 디버그 출력에 연결 시도가
나타나지 않았습니다

2
$ (which sshd) -Ddp 10222 마지막으로 내 문제의 원인을 확인하겠습니다. 무리 감사!
Cuga

9

또한 메모리가 너무 세분화 된 호스트가 SSH 세션을 호스팅하는 프로세스를 포크하기 위해 연속 메모리를 페이지에 할당 할 수 없도록 호스트를 가질 수 있습니다.

이러한 경우 다음 메시지 중 하나를 얻을 수 있습니다.

ssh_exchange_identification: read: Connection reset by peer

또는:

Connection closed by aaa.bbb.ccc.ddd

호스트가 구제되기 전에 얼마나 멀리 도착하는지에 따라.

메모리 조각화가 명백한 원인이면 해결책은 다른 방법을 통해 서버에 액세스하고 관련 서비스 중 일부를 다시 시작하는 것입니다. VM에는 스왑 파티션이 없기 때문에 Apache와 MySQL이 VM의 범인이라는 것을 알았습니다. 실패하면 호스트를 재부팅하십시오.


6

만약에 이런 일이 생겼기 때문입니다. 호스트에서 sshd를 실행하고 있는지 확인하십시오!

어리석은 실패이지만 실제로 문제가 될 수 있습니다.


10
sshd실행 중이 아닌 경우 연결이 닫히지 않고 거부됩니다 (시도 ssh -p someportwithoutsshd localhost).
Anthon

4
글쎄, 내 사건은 직접적인 연결이 아니었다. 청취하지 않는 컴퓨터에 대한 리버스 터널을 만들었으며 이것이 ssh 클라이언트 연결의 출력이었습니다.
txomon

1
나 또한 내가 어떤 SSHD이는 openssh-서버를 설치하여 고정 실행하지 않아도 모르는 바보
브라이언 Estrito을

4

이 오류는 서버에 대한 ssh 세션을 초과했기 때문에 발생했습니다. 호스트가 연결을 시도하고 모든 클라이언트의 모든 세션을 종료했습니다. 모든 세션을 정리 한 후에 문제가 해결되었습니다.


20
당신은 그렇게 않았다 방법?
중단

4
당신은 그렇게 않았다 방법? 핑 ...
knocte

한 가지 방법은 who사용자 프로세스를 사용 하고 종료 하는 열린 세션을 찾는 것 입니다.
Flatron

ssh 세션을 죽이는 방법 : unix.stackexchange.com/questions/127571/…
Tejas Kale

4

ssh_exchange_identification: read: Connection reset by peer루프에서 16 개 이상의 ssh 세션을 시작하는 스크립트 에서 문제를 가로 질러 실행했습니다 . sshd는 분명히 유지할 수 없습니다. 짧은 수면을 추가하면 내 문제가 해결되었습니다.

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done

3

또는 지난 밤에 내가 한 일을 수행하고 / var / empty를 삭제했을 수 있습니다. 분명히 디렉토리와 그 권한은 sshd의 기능에 필수적이며 다시 시작할 때 디렉토리를 다시 만들지 않으며 시스템 /etc/init.d/sshd을 다시 시작 하지 못하는 이유는 무엇입니까?

포 그라운드에서 sshd를 실행하여 문제를 발견했습니다.

# /usr/sbin/sshd -Dd
  Missing privilege separation directory: /var/empty/sshd

디렉토리를 다시 빌드하면 내 문제가 해결되었습니다.

drwxr-xr-x. root root  /var/empty
drwx--x--x. root root  /var/empty/sshd

리눅스 프로그래머를위한 참고 사항 : 비판적으로 중요한 것들 /var/empty... 정말로 ???


ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory. 따라서 적어도 하나의 배포가이 문제를 완전히 해결했습니다. /etc/init.d/sshd스크립트를 살펴보면 데비안에서는 최소한 권한 분리 디렉토리가 /var/run/sshd시작되어 존재하지 않는 경우 시작시 생성되는 것으로 보입니다 .
roaima

1

ssh_exchange_identification: Connection closed by remote hostSSH에 연결하려고 할 때 오류가 발생했습니다 . 로컬 컴퓨터의 SSH 포트 22에 대해 원격 포트 전달을 수행하여 인터넷의 원격 서버에서 일시적으로 액세스 할 수 있습니다.

실제로 시작시 SSH 서비스를 비활성화했음을 기억하지 못하여 로컬 컴퓨터에서 SSH 서비스를 시작해야했기 때문에 오류가 방금 표시되었습니다 sudo service ssh start.


1
고마워, 내 생명을 구해
Al Kasih

0

우선 먼저; 포트 22가 해당 호스트에서 실제로 수신 (열림) 중인지 확인하려면 호스트 IP 주소로 telnet을 연결하십시오.

telnet x.x.x.x 22

(그렇지 않으면 콘솔 케이블을 연결하여 로그인 할 수 있습니다)

제 경우에는 작동하지 않았으며 로그인하기 위해 콘솔 케이블을 연결했습니다. 로그인 한 후 5 개의 VTY 회선이 모두 해당 호스트 (Cisco 라우터)에서 사용 중임을 발견했습니다.

VTY 회선을 비우기 위해 매달려 있던 오래된 연결을 지우면 효과가 있습니다. VTY 줄 아래에 "exec-timeout 15"명령을 추가했습니다. 그런 다음 콘솔 케이블을 제거했습니다.

교훈:

모든 장치에서 5-10 분 시간 초과를 설정하십시오 (활동이 감지되지 않는 경우).


2
이 경우 "연결 설정"이 아니라 "피어에 의한 연결 재설정"이 아니라 다른 응답이 암시 된 것처럼 "연결이 거부 되었습니다"
Jeff Schaller

1
telnet을 사용할 수있게하는 것 (telnet을 수신하는 데몬)은 상당히 심각한 보안 결함이며, ssh가 선호되는 원격 콘솔 인 주된 이유입니다.
Xalorous

포트 22에서 telnet 클라이언트를 사용하여 ssh 디먼을 조사하는 것은 보안 결함이 아닙니다. 포트 23에서 텔넷 클라이언트를 사용하여 텔넷 데몬에 연결하는 것은 보안상의 결함입니다.
댄 앤더슨

0

내 경우는 실수로 소켓 프록시를 설정했습니다 (작동하지 않습니다). 정확히 ssh -vvv 출력과 빈 sshd 로그가 있습니다.


0

ssh_exchange_identification: Connection closed by remote host알 수없는 이유로 오류 가 발생할 수 있습니다. 내가 Visual Studio 코드를 사용할 때 . git pull명령을 사용하여 원격 저장소에서 가져 오려고 할 때도 동일한 오류가 발생했습니다 .

방금 임베디드 터미널을 닫고 우분투 터미널열고 다시 뽑았습니다. 그리고 그것은 성공했다


0

과에서 CentOS Linux release 7.4.1708 (Core)OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017연결이 내가 가진 포트를 필터링하지 뒤에 :

ssh_exchange_identification : 원격 호스트에 의한 연결 종료

그리고 내 라즈베리 파이가 꺼져있는 것으로 나타났습니다!

전원이 켜지지 않은 호스트에 "No route to host"오류가 발생한다고 생각했습니다. Raspberry Pi가 ISP 라우터 뒤에 있으므로 연결을 닫은 것일 수 있습니다.

그런 다음 Debian Stretch를 사용하여 포트를 필터링하지 않고 다른 인터넷 연결에서 실험 (전원이 꺼진 Raspberry Pi에 연결 시도)을 반복했으며 OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017이번에는 예상했습니다.

호스트 경로가 없습니다

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