AWS SSM 이용해 EC2 접속하는 CLI 개발

Allan Bae
5 min readJul 21, 2019

--

해당 글인 이전에 썻던 블로그를 Medium으로 마이그레이션 한것이다.

개요

AWS 에서는 Systems Manager Session Manager 것이 있는데,
이것은 EC2 접속 및 관리 기능을 제공한다.

Systems Manager Session Manager 기능 중에서
Session Start 기능을 이용하면 손쉽게 EC2에 접속을 할수 있다.
(SSH 접속이 아니라서 PEM키가 필요하지 않다.)

최근에는 SSH, SCP 기능도 제공하였는데,
이 기능을 장점은 SSH 포트(22) 오픈 없이, SSH, GCP 기능을 사용할수 있다.
(내부적으로 SSH Protocol Tunneling 을 이용하는것 같다.)

그러나 AWS에서 공식 제공하는 CLI툴로 해당 기능을 이용하는 경우에는, 사용성 측면에서 불편함이 많다. (아마 해보시면 알듯하다.)

1. 명령어가 길다.2. 명령어 변수로 EC2의 InstanceID를 필수로 줘야 하는데, 이 값은 사용자 친화적이지 못하다. (기억하기 어렵다.)

그래서 Interactive CLI 툴을 개발하여 원하는 EC2서버를 선택하고 Session Start, SSH 기능을 사용하여 접속이 가능하도록 구현하였다.

TL;DR
gossm 를 참고 하시면 된다. (Golang 으로 구현)

GOSSM

gossm은 Golang으로 구현 했고 MAC 사용자들은 homebrew를 통해 쉽게 인스톨 가능하다.
AWS CLI 및 SSM 관련된 기본적인 설치 없이도 사용 가능하다.

1. 필수조건

해당 조건은 만족해야 한다.

  • EC2 서버에 AWS SSM AGENT는 설치 되어 있어야 한다.
    (주의) AWS SSM AGENT 설치시 EC2에 AmazonEC2RoleforSSM IAM Policy가 있어야한다.
  • AWS Access key, Aws Secret key 가 있어야 한다.
    해당 키에 (ec2:DescribeInstances, ssm:StartSession) 권한은 꼭 있어야한다.

2. 설치

설치 방법은 https://github.com/gjbae1212/gossm/releases 에서 해당 OS에 맞게 직접 다운로드 해서 이용한다.

MAC 사용자인 경우에는 homebrew 통해 설치 가능하다.

$ brew tap gjbae1212/gossm $ brew install gossm

GOSSM 사용법

gossm은 현재는 3가지 명령을 지원 하는데, start-session, ssh, scp 이다.

1. start-session

로컬환경에 $HOME/.aws/credentials 이 이미 설정 되어 있으신 분은 아래와 같이 이용하시면 된다.

# 기본 
$ gossm start
# 멀티 프로필 등록해서 쓰시는분
$ gossm start -p 프로필명

설정은 안되신 분들은 아래와 같은 포맷으로
1. $HOME/.aws/credentials에 저장하거나
2. 실행시 -c 옵션에 파일 경로를 주시면 된다. (gossm start -c 파일경로)

[default] 
aws_access_key_id = AWS키
aws_secret_access_key = AWS시크릿

그리고 아래와 같이 CLI를 통해서 원하는 서버를 선택하면 된다.

gossm start-session 이용

2. SSH 와 SCP

기본적인 AWS credentials 설정 및 파라미터는 위의 start-session 동일하다.

그러나 SSH 와 SCP를 이용하기 위해서는 PEM키가 필요하다.

SSH, SCP를 이용할때 PEM키를 이용하는데, 동일하게 PEM키 있어야 EC2 서버에 접속 할수 있다.

그럼 기본적인 SSH 와 SCP 쓰면 되지 않나 생각이 들지만, 해당 기능을 이용하면
SSH포트(22)를 오픈하지 않아도 SSH, SCP 사용이 가능하여 보안적으로 장점이 있다.

gossm 이용한 SSH 사용 방법에는

# 1. PEM키가 ssh-add 로 등록되어 있다면
$ gossm ssh
# 2. PEM키를 파라미터로 입력 받을려면
$ gossm ssh -i PEM파일경로
# 3. 일반적인 SSH COMMAND 처럼 사용할려면
$ gossm ssh -e "user@서버명"
$ gossm ssh -e "-i PEM파일경로 user@서버명"

-e 옵션으로 쓰는 경우는 그냥 SSH Command 쓰듯이 이용하면 된다.

gossm ssh 이용

gossm 이용한 SCP 사용 방법은 ssh 방식과 비슷하다.

$ gossm scp -e "파일명 user@서버명:경로명" $ gossm scp -e "-i pem파일경로 파일명 user@서버명:경로명"

-e 옵션은 필수로 써야 하며 그냥 SCP Command 쓰듯이 하면 된다.

결론

자세한 내용은이곳 참조하자.

--

--