EC2인스턴스 SSH접속 안될때, AWS콘솔에서 Session Manager 사용하기

way·2025년 9월 8일

EC2를 처음 세팅해서 애플리케이션을 서버에 배포하려고 할 때, port22를 통해 SSH로 인스턴스에 접속해서 세팅해줘야 할 것들이 많다. (환경변수, docker포트 설정 등)

SSH(Secure Shell)란?

원격 호스트에 접속하기 위해 사용되는 보안 프로토콜

이 보안 프로토콜을 통해 서버에 원격으로 접속해서 직접 파일을 수정하거나, git으로 소스를 관리할 수도 있습니다. 저는 소스를 git에서 바로 CI/CD로 배포하고, 보안상 git으로 배포하지 못하는 환경변수는 SSH로 설정하는 간단한 방식의 관리를 택했다.

그런데 이 SSH 자체가 접속이 안될 때가 있다.

SSH와 연결이 되다가 몇시간 정도 지나면 끊기는데, 재로그인 하려고 할 때 아래와 같은 로그가 뜨고 멈춘상태로 지속되면서 결국 로그인이 안되는 현상이 있었다.

debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug3: ssh_connect_direct: entering debug1: Connecting to (내 인스턴스 주소) port 22.
debug3: set_sock_tos: set socket 3 IP_TOS 0x48 debug1: Connection established.
debug1: identity file (키페어파일).pem type -1
debug1: identity file (키페어파일).pem-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_9.0

Connection established. ✅ 서버 TCP 연결까지는 성공
identity file ... type -1 ⚠️ 키 인식 안 됨
=> EC2랑 네트워크 연결은 되는데 SSH 키 인증을 못 해서 다음 단계로 못 넘어가고 있는 상황

SSH로그인이 안되는 다음과 같은 원인이 있을 수 있다.

잘못된 키 파일 사용

.pem 파일이 EC2 생성할 때 지정한 Key Pair랑 다른 경우
-i (내 키페어).pem 경로/파일명 불일치
또는 chmod 400 (내 키페어).pem 안 해둔 경우

접속 사용자명 틀림

접속자명은 인스턴스를 생성할 때 지정한 OS타입별로 아래와 같아야한다. 나같은 경우 Ubuntu 22.04를 사용했기 때문에 ubuntu여야 한다.

Ubuntu AMI → ubuntu
Amazon Linux → ec2-user
RHEL → ec2-user 또는 centos

접속 시

ssh -i (내 키페어 명).pem ubuntu@(접속주소)
처럼 사용자명 맞춰야 함

Mac에서 키 권한 문제

Mac에서 .pem 파일이 다른 권한으로 되어 있으면 SSH가 무시합니다.
chmod 400 (내 키페어 명).pem

sshd_config 변경 실수

만약 PermitRootLogin no만 켜고 다른 계정에 SSH 설정 안 해둔 경우 → 로그인 막힐 수 있음

결론적으로는 Mac에서 키 권한 문제였고 로컬에서 보관하고 있는 키페어의 권한을 허용해주자 해결되었다.(여태 원인을 알 수 없는 버그는 Mac자체에서 보안 관련으로 허용을 안해줘서 나는 문제가 많았던것 같다...)

AWS Console Session Manager사용

그런데 SSH에 접속하지 않아도 인스턴스에 접근할 수 있는 방법이 있다. 바로 AWS콘솔에서 Session Manager를 사용해서 브라우저 기반 셸을 통해 EC2 인스턴스에 접속하는 것이다. (SSH 키나 보안 그룹 설정 없이도 인스턴스에 연결 가능)

접속 방법

1단계: AWS 콘솔 로그인
AWS Management Console에 로그인하고 내 EC2가 있는 리전을 선택

2단계: Session Manager 접근 방법
방법 1: EC2 콘솔을 통한 접근
EC2 콘솔로 이동-> 왼쪽 메뉴에서 "인스턴스"를 클릭->접속하고자 하는 인스턴스를 선택->상단의 "연결" 버튼을 클릭->"Session Manager" 탭을 선택->"연결" 버튼을 클릭

방법 2: Systems Manager 콘솔을 통한 접근
AWS 콘솔에서 "Systems Manager"를 검색하여 접속->
->왼쪽 메뉴에서 "세션 관리자"를 클릭->"세션 시작" 버튼을 클릭->대상 인스턴스를 선택->"세션 시작" 버튼을 클릭

3단계: 세션 연결
새로운 브라우저 탭 또는 창이 열리며 터미널 인터페이스가 표시됩니다.
리눅스의 경우 sh-4.2$ 또는 유사한 프롬프트가 나타납니다.
Windows의 경우 PowerShell 프롬프트가 나타납니다.

Session Manager 사용을 위한 AMI권한 설정

  1. SessionManager를 이용하기 위해서는 EC2 인스턴스용 IAM 역할이 하나 필요하다.

필수 관리형 정책 1개

AmazonSSMManagedInstanceCore

또는 사용자 정의 최소 권한

json{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:UpdateInstanceInformation",
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}

  1. 사용자용 IAM 정책
    최소 권한 정책

json{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession",
"ssm:TerminateSession"
],
"Resource": ""
},
{
"Effect": "Allow",
"Action": [
"ssm:DescribeInstanceInformation",
"ec2:DescribeInstances"
],
"Resource": "
"
}
]
}

적용 방법
인스턴스 역할:

IAM → 역할 생성 → EC2 선택
AmazonSSMManagedInstanceCore 정책 검색해서 연결
EC2 인스턴스에 역할 연결

사용자 권한:

IAM → 정책 생성
위 JSON 정책 적용
사용자/그룹에 정책 연결

이것만으로 Session Manager 기본 접속이 가능

이렇게 SSH또는 Session Manager 어느쪽으로든 접속해서 서버의 상태나 접속이 안되는 원인, 에러 로그등을 확인하고 조치할 수 있다.

0개의 댓글