kex_exchange_identification: Connection closed by remote host 에러 해결
위와 같이 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 접근을 할 수 있게 된다.
참고