SSH 명령을 사용할 때 보안이나 네트워크 구조 문제로 인하여 바로 접근이 불가능한 경우가 있습니다. JUMP HOST 방법을 이용하면 중간 서버를 경유하여 SSH 연결이 가능하므로 접근 문제를 어느 정도 해결할 수 있습니다.
버전
- Redhat Enterpries Linux 7 ~ 9
- RHEL6 버전 이하는 테스트하지 않았습니다.
연습 환경
Ansible 서버에서 Client 서버로 바로 연결이 되지 않는 경우입니다. Ansisble 서버는 오직 Bastion 서버를 통하여 Client 서버로 접근할 수 있는 환경입니다. JUMP HOST 기능을 사용하면 이러한 상황에서 Ansible 서버는 Bastion 서버를 경유해서 Client로 접근할 수 있습니다.
SSH 명령을 이용한 JUMP HOST 경유
먼저 Ansible 서버에서 Client로 접속하면 접속이 실패합니다.
[root@ansible ~]# ssh 192.168.243.111
root@192.168.243.111's password:
Permission denied, please try again.
root@192.168.243.111's password:
네트워크 연결은 되지만 SSH 연결이 막혀있어 접속이 지속적으로 실패하는 상황입니다.
ssh 명령어로 JUMP HOST 이용한 서버 연결
-J 옵션을 이용하여 경유 호스트를 등록하고 다시 시도합니다.
[root@ansible ~]# ssh -J 192.168.243.131 192.168.243.111
...
### 경유지 서버 패스워드 입력
root@192.168.243.131's password:
...
### 목적지 서버 패스워드 입력
root@192.168.243.111's password:
...
[root@client~]#
출력 결과에서 보이는 바와 같이 경유지 Bastion 서버를 통해서 Client로 향하고 있으므로 패스워드 확인도 각 서버 모두 진행됩니다.
SSH JUMP HOST 영구 등록
매번 -J 옵션을 이용하기 번거로울 수 있습니다. ssh client 설정 파일에 등록하게 되면 명령을 칠 때마다 자동으로 JUMP HOST를 통하도록 설정할 수 있습니다.
설정 파일 변경편집기를 이용하여 JUMP HOST 정보를 등록
[root@ansible ~]# vim ~/.ssh/config
Host client
HostName 192.168.243.111
ProxyJump 192.168.243.131
-
- HOST: ssh 명령에서 사용하는 호스트 이름 또는 별칭, 실제 호스트 이름이 아닌 임의 문자열 일 수 있습니다. ssh 명령 뒤에 이 이름을 입력해야 JUMP HOST가 작동합니다.
- HostName: 실제로 연결하려는 대상의 IP 주소 또는 도메인입니다.
- ProxyJump: JUMP HOST를 지정합니다. SSH 연결은 먼저 이 서버를 거쳐서 목적지 서버로 연결됩니다.
ssh 접속
[root@ansible ~]# ssh client
root@192.168.243.131's password:
root@192.168.243.111's password:
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at <https://red.ht/insights-dashboard>
Last login: Mon Nov 27 06:36:20 2023 from 192.168.243.131
[root@client ~]#
이제 -J 옵션을 지정하지 않아도 해당 서버의 연결은 자동으로 JUMP HOST를 경유합니다.