"AWSSupport-TroubleshootSSH" 런북을 사용하여 EC2 Linux 인스턴스에 SSH 연결이 불가한 이슈를 해결하는 방법

6분 분량
콘텐츠 수준: 중급
7

본 기사는 AWS 지원 자동화 워크플로우(Support Automation Workflow) 의 "AWSSupport-TroubleshootSSH" 런북을 사용하여 EC2 Linux 인스턴스에 SSH 연결이 불가한 이슈를 진단하고 해결하는 방법에 대해 설명합니다.

 

$ ssh -i private.pem ec2-user@<Public IP>
ec2-user@<Public IP>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

$ ssh -i private.pem ec2-user@<Public IP>
ssh: connect to host <Public IP> port 22: Connection refused

EC2 Linux 인스턴스에 SSH 로 연결이 불가능한 경우 위와 같은 문제가 발생 할 수 있습니다.
위 예제는 SSH 연결 문제에서 자주 발생되는 에러 메시지이며, 이번 기사에서 다뤄볼 내용입니다.

 

이러한 경우 긴급히 이슈를 해결하기 위해 AWS Support로 지원 케이스를 생성하고 문제 해결을 시도할 수 있지만, AWS 지원 자동화 워크플로우(Support Automation Workflow) 런북을 이용하면 AWS Support의 도움 없이 직접 빠르게 이슈를 해결할 수도 있습니다.

AWS 지원 자동화 워크플로우는 AWS Systems Manager 셀프 서비스 자동화 런북 모음입니다.
이러한 런북은 AWS Support 엔지니어링팀에서 고객 문제를 해결하며 배운 모범 사례를 바탕으로 작성되었습니다.

이를 통해 AWS 고객은 AWS 리소스의 일반적인 문제를 진단, 수정, 해결하실 수 있습니다. [1]
또한 네트워크 문제를 사전에 식별하고 로그 수집 및 분석의 다양한 작업을 수행할 수 있습니다.

AWS 지원 자동화 워크플로우 런북은 AWS 모범 사례에 따라 수동 작업 및 관리 오버헤드, 인적 오류를 줄일 수 있습니다.


"AWSSupport-TroubleshootSSH" 런북은 Amazon EC2Rescue 도구를 설치하고 SSH 를 통해 Linux 인스턴스에 연결할 때 발생되는 몇 가지 문제를 확인하고 수정하는 자동화 워크플로우 입니다.

해당 런북은 Amazon EC2Rescue 도구 사용이 필요하므로 지원되는 운영 체제에 충족되는 경우 사용이 가능합니다.

지원되는 운영 체제

  • Amazon Linux 2
  • Amazon Linux 2016.09+
  • SLES 12+
  • RHEL 7+
  • Ubuntu 16.04+

소프트웨어 요구 사항

  • Python 2.7.9+ 또는 3.2+

참고: 상세 메시지나 다른 유형의 오류 메시지 문제 해결에 대한 자세한 내용은 SSH를 사용하여 내 Amazon EC2 Linux 인스턴스에 연결할 수 없는 이유는 무엇인가요?를 참조하세요.


해결 방법

시작하기 전:

  • 문제를 해결하려는 Amazon EC2 인스턴스의 인스턴스 ID를 복사합니다.
    자동화 문서를 실행하려면 인스턴스 ID가 필요합니다.
  • (선택 사항) 연결할 수 없는 Amazon EC2 인스턴스와 같은 가용 영역에 있는 서브넷의 ID를 복사합니다. EC2 복구 인스턴스 (EC2 Rescue Instance) 는 이 서브넷에 설치됩니다.
  • (선택 사항) 자동화를 위한 AWS Identity and Access Management(IAM) 역할을 생성하고 지정합니다. 이 역할을 지정하지 않으면 AWS Systems Manager Automation은 이 문서를 실행하는 사용자의 권한을 사용합니다. 자동화를 위한 역할을 생성하는 데 대한 자세한 내용은 IAM을 사용하여 자동화를 위한 역할 구성을 참조하세요.

AWSSupport-TroubleshootSSH 자동화 실행

  1. AWS Systems Manager 콘솔를 열고 자동화 메뉴를 선택합니다.

SSH 1

 

  1. “Execute automation” 을 선택합니다.

SSH 2

 

  1. 검색 필드에 AWSSupport-TroubleshootSSH를 입력한 다음 Enter 키를 누릅니다.

SSH 3

 

  1. 검색 결과에서 AWSSupport-TroubleshootSSH를 선택하고 문서 설명에서 “자동화 실행” 을 선택합니다.

SSH 4

 

  1. “Execute automation runbook“ 섹션에서 ”Simple execution“ 을 선택합니다.

SSH 5

 

  1. “input parameters” 에서 아래 파라미터를 내용을 확인하고 입력합니다.

SSH 6

  • InstanceId : SSH 연결이 할 수 없는 인스턴스 ID 를 입력합니다.
  • Action :
    • CheckAll : SSH 연결에 문제가 되는 부분을 진단합니다.
    • FixAll : SSH 연결에 문제가 되는 부분을 수정합니다.
  • AllowOffline : 온라인으로 문제 해결이 실패하거나 현재 문제가 되는 인스턴스가 SSM 의 관리형 인스턴스가 아닌 경우, 오프라인으로 문제 해결을 하기 위해 ‘True’ 를 선택합니다.
    (이 파라미터를 False 로 설정하면 자동화 실행중 Systems Manager 에서 관리하는 인스턴스가 아닌 경우, 자동화가 실패하게 됩니다.)
  • (선택 사항) SubnetId : SSH 열결 문제를 해결할 EC2 인스턴스와 같은 가용 영역에 있는 기존 VPC의 서브넷을 지정합니다.
    이 런북은 기본적으로 새 VPC를 생성하지만 기존 VPC의 서브넷을 지정할 수 있습니다.
  • (선택 사항) S3BucketName : 쓰기 권한이 있는 버킷의 이름을 입력합니다. 이를 지정한 경우 자동화간 발생된 로그가 해당 버킷에 업로드됩니다.
  • (선택 사항) AutomationAssumeRole : 런북을 실행 위한 IAM 역할을 지정합니다. 역할을 지정하지 않으면 AWS Systems Manager Automation은 이 문서를 실행하는 사용자의 권한을 사용합니다.

 

  1. 런북을 실행하기 위한 파라미터 입력이 완료되면 “Execute” 을 선택합니다.

SSH 7

 

  1. 런북이 실행이 완료되면 아래와 같은 자동화 실행 결과를 확인 할 수 있습니다. 자동화 실행 결과에서는 아래와 같은 내용을 확인 할 수 있습니다.

SSH 8

  • Outputs : 런북 실행 로그를 확인 할 수 있습니다.
  • Execution status : 전체 자동화 실행 과정을 확인 할 수 있습니다. 자동화 실행이 완료되면 Overall status 가 Success 로 변경됩니다.
  • Executed steps : 전체 자동화 실행 과정이 단계별로 나오며 수행된 자동화 단계의 상태를 볼 수 있습니다.

 

  1. “Outputs” 을 확인하면 아래와 같이 런북이 /home/ec2-user/.ssh 의 파일 권한, 소유권에 문제를 진단한 것을 확인 할 수 있습니다.

SSH 9

 

  1. 위와 같이 SSH 연결 문제가 확인한 이후, 다시 한번 자동화를 수행하여 해당 문제를 수정 할 수 있습니다.

SSH 10

 

  1. 아래와 같이 문제가 진단된 SSH 연결 문제가 수정이 되고 SSH 연결이 가능하게 된 것을 볼 수 있습니다.

SSH 11

$ ssh -i private.pem ec2-user@<Public IP>
Last login: Tue Mar 26 01:31:44 2024 from <IP>
   ,     #_
   ~\_  ####_        Amazon Linux 2
  ~~  \_#####\
  ~~     \###|       AL2 End of Life is 2025-06-30.
  ~~       \#/ ___
   ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
      ~~._.   _/
         _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
       _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/

7 package(s) needed for security, out of 12 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-39-91 ~]$

troubleshootSSHOffline 수행 예제

지금까지는 온라인 수정에 대한 자동화 예제를 설명 드렸습니다.
이번에는 오프라인 수정 작업인 “troubleshootSSHOffline” 수행 예제를 설명 드리도록 하겠습니다.

“troubleshootSSHOffline” 은 Systems manager 의 관리형 인스턴스가 아닌 경우, 실행이 되는 자동화입니다.
아래 예제를 통해 “troubleshootSSHOffline” 이 어떻게 실행되는지 확인 할 수 있습니다.

먼저 자동화 설정 부분에서 SubnetId 를 SSH 연결에 문제가 되는 인스턴스와 동일한 서브넷 ID 를 입력합니다.

SSH OFF 1

위와 같이 설정을 하고 자동화를 실행하면 아래와 같이 “troubleshootSSHOffline” 단계가 수행되는 것을 확인 할 수 있습니다.

SSH OFF 2

“troubleshootSSHOffline” 가 수행이 되면 입력한 파라미터를 기반으로 복구 인스턴스 (EC2 Rescue Instance) 가 생성이 되고 생성된 복구 인스턴스를 통해 SSH 연결 문제를 진단하고 수정을 하는데 그 과정에서 인스턴스가 중지되고 AMI 가 생성이 되는 작업이 수행 될 수 있습니다.

자동화 실행 완료 후, SSH 연결 문제가 해결이되고 아래와 같이 어느 부분이 SSH 연결 문제를 발생 시켰는지 확인 할 수 있습니다.

$ sudo cat /var/tmp/ec2rl/<YYYY-MM-DD...TIME>/Main.log
...
2024-03-26T04:28:33UTC logutil.py INFO    : module run/openssh               [SUCCESS] All configuration checks passed or all detected problems fixed.
2024-03-26T04:28:33UTC logutil.py INFO    :                                  -- FIXED       Bad lines in configuration file: /etc/ssh/sshd_config      <<---!!!! 
2024-03-26T04:28:33UTC logutil.py INFO    :                                  -- FIXED       Permission mode includes permissions for groups and/or other users: /etc/ssh/ssh_host_rsa_key
2024-03-26T04:28:33UTC logutil.py INFO    :                                  -- FIXED       Permission mode includes permissions for groups and/or other users: /etc/ssh/ssh_host_ecdsa_key
2024-03-26T04:28:33UTC logutil.py INFO    :                                  -- FIXED       Permission mode includes permissions for groups and/or other users: /etc/ssh/ssh_host_ed25519_key
...
$ sudo cat /etc/ssh/sshd_config
...
# Port22 # commented out by ec2rl   <<<----!! 문제가 되던 설정
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...

마지막으로 위와 같이 AWS 지원 자동화 워크플로우 (Support Automation Workflow) 런북을 진행하였음에도 불구 이슈가 해결되지 않거나 이슈 해결에 보다 전문적인 도움이 필요한 경우 위와 같이 실행한 런북 실행 ID 및 실행 결과 등의 정보와 함께 AWS Support 에 도움을 요청해 주시길 바랍니다.

참고 문서

[1] AWS 지원 자동화 워크플로우(AWS Support Automation Workflow - AWS SAW)
https://aws.amazon.com/ko/premiumsupport/technology/saw/

[2] AWSSupport-TroubleshootSSH
https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html

[3] I'm receiving errors when trying to connect to my EC2 instance using SSH. How can I use the AWSSupport-TroubleshootSSH automation workflow to troubleshoot SSH connection issues?
https://repost.aws/knowledge-center/ec2-ssh-errors-automation-workflow

profile pictureAWS
지원 엔지니어
게시됨 한 달 전435회 조회
댓글 없음

관련 콘텐츠