Issue

kex_exchange_identification: Connection closed by remote host 에러 해결

TTOII 2022. 4. 5. 21:45
728x90

위와 같이 Bastionhost를 구성하고 내 pc에서 private ec2에 접근하려고 할 때 아래와 같은 에러가 발생했다.

kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

구글링 해보니 나와 같은 문제를 겪은 많은 사람들이 있었고 찾아낸 해결 방법 리스트는 다음과 같다.

 

1. /etc/hosts.allow 와 /etc/hosts_deny 를 수정하는 방법

/etc/hosts.allow

# 
# hosts.allow This file describes the names of the hosts which are 
# allowed to use the local INET services, as decided 
# by the '/usr/sbin/tcpd' server. 
#
sshd: 192.168.56.103
sshd: 172.79.32.
sshd: 133.11.

# 이렇게 한줄로 써줘도 된다.
sshd: 192.168.56.103, 172.79.32., 133.11.

하단에 sshd: 허용할 ip 주소을 입력한다.

위와 같이 설정하면 sshd: 192.168.56.103 / 172.79.32.XXX / 133.11.XXX.XXX 대역을 허용한다는 뜻이다.

 

/etc/hosts.deny

# 
# hosts.deny This file describes the names of the hosts which are 
# *not* allowed to use the local INET services, as decided 
# by the '/usr/sbin/tcpd' server. 
# 
# The portmap line is redundant, but it is left to remind you that 
# the new secure portmap uses hosts.deny and hosts.allow. In particular 
# you should know that NFS uses portmap! 
sshd: ALL

위와 같이 설정하면 hosts.allow에 지정한 것 외의 나머지는 모두 ssh 접근이 불가능하게 된다. 

 

 

2. ssh-client가 적용시킬 private key를 명시하기

ssh-keygen을 이용해 키페어를 생성하면 기본적으로 .ssh 디렉토리에 id_rsa 디폴트 키가 생성된다.

ssh 명령 실행시 ssh-client는 /home/.ssh 디렉토리의 id_ 로 시작하는 파일을 찾고 그 파일이 있으면 그것을 적용시킨다.

그러나 만약 그 파일이 /home/.ssh 디렉토리에 존재하지 않을 경우 우리가 직접 -i 옵션을 사용해 명시해주어야 한다.

 

만약 ec2를 생성할 때 ssh-keygen이 아닌 키페어 생성을 이용할 경우 기본적으로 파일은 다운로드 디렉토리에 받아지게 되고 ssh 명령 실행 시 ssh-client는 다운로드 디렉토리의 위치를 찾지 못하므로 에러가 발생하는 것이다.

다시 말해서 ssh 명령 실행 시 ssh-client가 적용시킬 .ssh/id_xxx 파일을 명시해줘야 한다. 

 

ec2 생성 시 만들었던 키페어를 ssh-client의 .ssh 디렉토리에 id_rsa라는 파일 이름을 만들어 복사해주면 

ssh -J 옵션을 이용해 jumphost 접근을 할 수 있게 된다.  

 

 

참고

728x90