AWS EC2에서 키페어를 지정하지 않았을 때 SSH 연결까지.

galion·2024년 7월 3일
0

아무생각없이 EC2만들때 키페어를 만들지 않고 Cloud9 환경을 구성하려 해보니 SSH연결이 필요했다. 처음부터 미리 해뒀으면 편했는데 여러 삽질 끝에 SSH연결을 성공해서 그 부분에 대해 기록해보려고 남긴다.

SSH에 필요한 것
1. 키 페어
2. 퍼블릭 서브넷에 속한 인스턴스
2.1 퍼블릭 IP가 필요함
2.2 VPC에서 Details에서 Dns resolution, hostname 항목 모두 Yes인지 체크. 그래야 인스턴스에 dns hostname이 자동생성되고 ssh에 연결 가능.
3. NACL, SG에 SSH 연결용 포트(22번)이 인바운드룰에 허용되어 있는지 체크.

시작

ec2에 세션 매니저로 접속. cli환경에서 진행한다.
먼저 처음 EC2를 생성할 때 키페어를 생성하지 않았다면 .ssh 폴더가 존재하지 않기에 이거부터 만든다.

mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

미리미리 필요한 파일과 권한 할당도 해두고, 그 다음으론 rsa 키페어를 만드는 명령어.

ssh-keygen -t rsa -b 2048 -f ~/.ssh/my-new-key

my-new-key 부분은 원하는 키페어 이름을 기입.
이 작업을 통해 퍼블릭키와 프라이빗 키 2개의 파일이 생성.

cat ~/.ssh/my-new-key.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr1N3pQ...

위의 명령어로 퍼블릭 키를 얻고 미리 복사해둔다.

그 다음으론 미리 만들어둔 authorized_keys 파일에 퍼블릭 키 정보를 저장해줘야 한다.

echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr1N3pQ..." >> ~/.ssh/authorized_keys

" " 안에 본인의 퍼블릭 키를 넣을 것.

그 다음엔 연결을 테스트해본다.

ssh -i ~/.ssh/my-new-key ec2-user@your-ec2-instance-public-dns

ssh -i 명령어 후, 나의 프라이빗 키 정보를 넘겨주고, 현재 접속중인 이름@현재 인스턴스의 퍼블릭 dns 정보를 넘겨주면 접속이 된다.

위와 같이 ssh 명령어에 alias 를 넘겨서 바로 접속하게 하는 방식은 config파일을 새로 생성해서 지정해주면 된다. 만약 ssh 종료를 하고싶으면 exit 입력해주면 된다.

vim ~/.ssh/config

나의 경우는 vim을 사용했으며. 사용방식은 i 버튼 누르면 편집상태 진입. esc키를 누르면 편집 종료고 : 를 입력하고 wq를 입력하면 저장 후 종료이다.
아래 정보를 입력해주고 저장후종료 하면 별명(alias)를 통해 ssh연결이 가능하다.

Host <alias>
  HostName <hostname>
  User <username>
  IdentityFile <path-to-private-key>
  Port <port-number>
  OtherOptions <option-value>

Host는 내가 지정하고싶은 별명을 입력해주고. Hostname은 인스턴스의 private ip 주소를 입력한다. user는 현재 접속중인 유저를 입력해주고, IdentityFile은 내가 만들어준 프라이빗키 주소를 입력해주면 된다.
포트번호는 기본적으로 22번이고 다른걸로 하고싶을 때 지정하는 옵션이며 다른 옵션도 동일.

# EC2 인스턴스 1
Host my-ec2-instance-1
  HostName 10.0.1.122
  User ec2-user
  IdentityFile ~/.ssh/my-key.pem
  ServerAliveInterval 60
  ServerAliveCountMax 5

# EC2 인스턴스 2
Host my-ec2-instance-2
  HostName 10.0.2.123
  User ec2-user
  IdentityFile ~/.ssh/my-other-key.pem
  Port 22

# 예제 서버
Host example-server
  HostName example.com
  User username
  IdentityFile ~/.ssh/example-key.pem

챗GPT가 만들어준 예시이다. 인스턴스2번처럼 입력해주고 포트번호만 제외하면 된다.

이제 내가 원래 목표했던 Cloud9 환경까지 만들려면.
우선 ec2에서 SSH연결을 하고 나서 Node.js, pip를 설치해야한다. 명령어는

sudo yum install -y nodejs
sudo yum install -y python-pip

node -v
npm -v
pip --version

그러면 설치가 완료된다. 그 후 밑의 명령어를 입력해서 버전체크 후 제대로 출력되면 설치 완료.

그 다음 SSH를 해제하고 authorized_keys에 cloud9의 퍼블릭키를 등록해줘야 한다.

먼저 Cloud9 콘솔에 접속해서 환경생성을 한다. existing compute를 선택하면 밑의 existing compute 입력창에서 가장 위에

AWS Cloud9 uses SSH public key to connect securely to your server.
To create the secure connection, add our public key to your ~/.ssh/authorized_keys file and provide your login credentials below.

라는 노란색 창이 떠있고, 여기의 Copy key to Clipboard 버튼을 눌러 복사한다.

echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr1N3pQ..." >> ~/.ssh/authorized_keys

echo 다음 " " 안에, 미리 복사해둔 cloud9의 퍼블릭키를 넣고 명령어를 입력하면 된다. 그 후 밑에 접속하는 유저명(ec2-user 등), hostname(public dns주소) 포트번호(22번으로) 하고 생성을 누르면 생성이 완료.

profile
취업 준비중

0개의 댓글