Putty의 SSH 터널링 사용해서 private EC2에 접속하기
AWS를 사용하다보면 bastion host를 두고 SSH 터널링을 이용해서 내부의 서버로 접속해야하는 경우가 있다.
그러니까 이런 경우 말이다.
외부망(인터넷망) <---------> bastion host <---------> private EC2
최근에 Putty를 많이 사용하고 있다보니까 ppk와 Putty를 이용해서 private EC2에 접근해야하는데...
어떻게 해야하나 고민하고 있었는데 SSH 터널링이 있었다.
그래서 그 방법을 정리해두기로 했다.
0. pem키 추가 발급하기
이건 본문과는 관련없는 이야기이다. 해당되는 내용이 아니라면 생략해도 된다.
기존에 구축해놓은 테스트 베드에서 테스트를 하려고 했는데, 이 테스트베드에는 이미 사용하고 있는 pem 키가 있다.
이건 테스트 용도로 절대 쓰고 싶지 않아서 새로운 pem 키를 발급받아서 SSH 공개키로 등록하고 사용하기로 했다.
일단 지금 구축된 인프라 환경은 이렇다.
인터넷 <----------> bastion host(호스트명 : bastion) <----------> private EC2(호스트명 server1)
(1) AWS EC2 서비스에 가서 키 페어를 생성한다.
bastion host의 키와 private EC2의 키를 모두 생성해주어야 한다.
기존에는 bastion-key와 server1-key가 있었는데 이건 쓰고 싶지 않기 때문에...
bastion-key2와 server1-key2를 추가로 만들었다.
(2) 클라이언트에서 ssh-keygen 명령어를 이용해서 방금 생성한 pem 키(비밀키)에 대응하는 공개키를 만든다.
필자는 맥북을 사용하고 있으니까 ssh-keygen 명령어를 그냥 사용하면 된다.
만약 Windows 계열을 사용하고 있다면 powershell에서 ssh-keygen 명령어를 사용하면 된다.
(powershell에서 ssh-keygen 명령어가 안된다면 ssh-keygen.exe가 Windows 어딘가에 없는 것이다.. )
덮어쓸건지 물어보는데 yes라고 답하면 passphrase를 설정하라고 한다.
빈 칸으로 넘어가도 되고 입력해도 된다.
이렇게 공개키를 만들고나면 다음과 같이 pub 확장자를 가진 파일이 만들어진다.
이 파일의 내용을 bastion host에 추가해주어야 한다. 그러니까 서버에 접속하자.
그리고 ~/.ssh 디렉터리로 이동한다.
~/.ssh/authrized_keys 이라는 파일이 있을 텐데 이 파일을 열어서 마지막 끝에 .pub 키의 내용을 복사해서 넣어주자.
그럼 이제 새로 생성한 pem 키를 이용해서 서버에 접속할 수 있다.
private EC2도 마찬가지이다. 동일하게 공개키를 등록해주자!
1. PEM -> PPK 변환하기
이제 Putty를 이용해서 bastion host를 거쳐 private EC2에 접근하는 방법을 알아보자.
일단 앞서 만든 pem키를 ppk로 변환하여야 하는데, 여기서부터는 Windows 계열의 PC에서 실습을 진행할 것이다.
이유는 없다.. 그냥 Putty를 Windows 환경에서 많이 사용하기 때문에..
(1) ppk로 변환하려면 PuTTY Key Generator가 필요하다.
PuTTY 공식 사이트에서 다운로드 받아오자.
(2) 'Load'를 눌러서 pem 키를 불러온다.
(3) 'Save private key'를 눌러서 비밀키를 생성하고 저장한다.
(4) 이렇게 bastion host의 PPK와 Private EC2의 PPK를 모두 생성해준다.
생성 완료!
2. Putty의 SSH 터널링 이용하여 Private EC2에 접근하기
Putty를 열고 설정을 하나씩 구성해보자.
우선 Bastion host에 먼저 접속하여야 한다. 그래서 Private EC2에도 접근할 수 있다.
(1) Putty를 열고 bastion host(퍼블릭 IP주소를 가진 서버)에 접속한다.
(2) SSH > Auth > Credentials에서 Private key 경로를 추가한다.
PuTTY Configuration을 보면 Connection > SSH > Auth에서 Private key file for authentication을 등록할 수 있다.
bastion host에 접속하기 위한 private key이니까 bastion host의 ppk를 추가해준다.
(3) 접속 성공을 확인한다.
자, 일단 bastion host는 접속에 성공했다.
이제 SSH 터널링을 시작해보자.
(4) bastion host에 접속한 상태로 Change Settings를 눌러준다.
근데 사실 Change Settings를 눌러서 별도로 설정하지 않고
(2)에서 한꺼번에 SSH > Tunnels 메뉴에 들어가서 설정해줬어도 된다..
(5) SSH > Tunnels에 가서 포트 포워딩을 설정한다.
Source port는 bastion host의 포트를 말한다. 임의의 포트 번호를 넣어주었다.
Destination은 Private EC2의 프라이빗 IP주소와 ssh 포트 번호이다.
입력하는 방법은 172.16.10.10:22와 같이 입력한다. http://172.16.10.10 이런식으로 써도 된다.
source port는 뭐... bastion host에서 사용하지 않고 있는 포트 번호를 입력하면 된다.
'Add' 버튼을 눌러 추가를 해주고 'Apply' 버튼을 눌러서 적용해준다.
(6) 이제 새로운 세션을 연결할 준비를 하자.
New Session을 클릭한다.
(7) Private EC2에 접속을 시도한다.
bastion host의 11000 포트에 private EC2를 포워딩 했기 때문에 내부의 11000으로 설정하여야 한다.
Host name은 127.0.0.1 혹은 localhost로 하면 된다.
아, 그리고 private EC2에 접근할 때에도 ppk가 필요하기 때문에 Connection > SSH > Auth > Credentials에서 ppk를 추가해주자.
여기에는 private EC2의 ppk가 들어가야 한다. bastion host의 ppk가 아니다. 주의하자.
이렇게 하면 private EC2에 접속할 수 있다.
번외. WinSCP의 터널링 기능 이용해서 bastion host와 private EC2에 접속하기
터널링은 정말 좋은 기능인 것 같다.
번외로 WinSCP의 터널링 기능을 이용하는 방법도 정리해보기로 했다.
일단 bastion host에는 기존과 동일하게 접속하면 된다.
ppk 혹은 pem을 이용한 로그인 방식을 사용하고 싶다면 "고급" 설정을 누르고 SSH 인증을 추가해주면 된다.
아래의 개인키 파일에 bastion host의 pem, ppk를 추가해주자.
그럼 private EC2에는 어떻게 접근할 수 있을까?
일단 private EC2의 프라이빗 IP주소를 입력한다.
"고급" 버튼을 눌러서 세부적인 설정을 추가해주자.
연결 > 터널링에서 "SSH 터널링을 통한 접속"을 체크한 후, bastion host의 퍼블릿 IP주소와 ssh 포트 번호를 입력한다.
bastion host도 개인키를 이용한 인증을 사용하기 때문에 "개인키 파일" 부분에 bastion host의 키를 추가해면 된다.
Private EC2에서도 개인키를 이용한 인증을 사용하기 때문에 SSH > 인증에서 개인키를 등록해주어야 한다.
이제 "에이전트 포워딩 허용"을 체크해주자.
그리고 확인을 누르면 private EC2에 접속할 수 있다!
끝!