XX아~ 열심히 하지마~. 잘하란 말야~

ssh tunneling해서 접속해야 하는 것을 한번에 접속하기 본문

Blog/IT

ssh tunneling해서 접속해야 하는 것을 한번에 접속하기

IamwhatIam 2023. 3. 5. 14:18

회사 Service를 현재 AWS를 통해서 하고 있다.

보안상의 이유로 EC2에 Console 접속을 직접 할 수 없게 설계를 했다.

그래서 Bastion Server를 통해서 접속을 해야 하는데 Bastion Server는 Inbound 설정을 해 놓아서

지정된 IP에서만 접속할 수 있게 설정했다.

평상시 집과 사무실에서는 Console로 접속하는데 ssh tunneling을 해서 접속한다.

그런데 간혹 외부에서 회사 Service의 Log를 봐야 하는 경우가 종종 발생했다.

외부에서는 EC2에 Console 접속이 근본적으로는 막혀 있기 때문에 개발장비를 통해서 접속해야 하는 편법을 사용했다.

외부(미등록IP) --> 개발장비 --> Bastion Server SSH Tunneling

외부(미등록IP) --> 개발장비 --> localhost 접속(tunneling) --> EC2

위와 같이 2번의 접속을 통해서 접속을 해야 하는데... 그 접속이 매끄럽지 못하는 경우가 많다.

그리고 평소 사무실에서도 Tunneling 하는게 두번의 로그인 절차를 진행해야 하다보니 여간 귀찮은게 아니었다.

 

ssh -i "keyfile.ppk" ec2-user@[Bastion Public IP] -L 2211:[EC2 Subnet IP]:22

[Bastion Server로의 2211번 포트 Tunneling]

 

ssh -i "keyfile.ppk" ec2-user@localhost -p 2211

[Localhost 2211번 포트를 통해 접속]

 

이렇게 하면 ssh를 통해서 Bastion Server를 통하고 그리고 Subnet을 통해서 EC2에 접속하게 된다.

AWS의 RDS를 DB로 상용하기 때문에 Tunneling을 해서 DBeaver 같은 DB Tool 접속도 가능하다.

(RDS 접속도 Bastion Server를 통해서만 가능하게 설계했다. 물론 AWS내부에서는 직접 연결됨)

 

지금 하고자 하는것은 두번의 절차로 접속하는게 아니라 한번의 명령어로 자동 접속하게끔 하고 싶은 것이다.

방법은 EC2 Server로의 Proxy 설정을 해서 해결할 수 있다.

 

먼저 접속을 위해 사용되는 인증Key File을 계정 home의 디렉토리 아래 .ssh 디렉토리로 복사한다.

cp [keyfile path]/[keyfile name] ~/.ssh

 

그런다음 ~/.ssh/config 파일을 생성하거나 기존 파일을 열어서 수정한다.

vi ~/.ssh/config
Host bastion
	HostName [Bastion Server Public IP]
	User [Account]
	ForwardAgent yes
	IdentityFile [keyfile의 절대경로 및 keyfile명]

Host staging [사용자 정의 명 - 나의 경우는 awsEC2 라고 했다.]
	HostName [EC2의 Subnet IP]
	User [Account]
	IdentityFile [keyfile의 절대경로 및 keyfile명]
	ProxyCommand ssh bastion -W %h:%p

위와 같이 입력하고 [ESC] - wq!

이제 한번에 접속이 가능하다.

ssh staging