기존 EC2 인스턴스에 키 페어 추가


240

AWS 프로덕션에 종료 할 수없는 2 개의 인스턴스가 실행중인 계정에 대한 AWS 콘솔 액세스 권한이 부여되었습니다. 그러나 이러한 인스턴스에 대한 SSH 액세스 권한을 얻고 싶습니다. 새 키 쌍을 만들어 인스턴스에 적용하여 SSH에 연결할 수 있습니까? 인스턴스가 생성 된 키 페어에 대한 기존 pem 파일을 얻는 것은 현재 옵션이 아닙니다.

이것이 가능하지 않으면 인스턴스에 들어갈 수있는 다른 방법이 있습니까?


여기에 솔루션을 시도 : stackoverflow.com/questions/1454629/...를 ? ssh-add필요한 것을해야합니다.
Marc Bollinger

ssh-add 기능을 익히는 것은 좋지만이 사용자는 자신이 만든 키 쌍을 사용하여 인스턴스를 실제로 만들었으므로 도움이되지 않습니다. 내가 말하는 인스턴스는 내가 액세스 할 수없는 다른 키 페어로 생성되었습니다.
Chris Wagner


4
실행중인 인스턴스에는 키 페어를 적용 할 수 없습니다.
Rodney Quillo

답변:


172

실행중인 인스턴스에는 키 페어를 적용 할 수 없습니다. 새 키 페어 만 사용하여 새 인스턴스를 시작할 수 있습니다.

복구를 위해 EBS 부팅 AMI 인 경우이를 중지하고 볼륨의 스냅 샷을 만들 수 있습니다. 이를 기반으로 새 볼륨을 만듭니다. 다시 사용하여 이전 인스턴스를 시작하거나 새 이미지를 만들거나 데이터를 복구 할 수 있습니다.

임시 스토리지의 데이터는 손실되지만


이 질문과 답변의 인기로 인해 Rodney가 자신의 의견에 게시 한 링크의 정보를 캡처하고 싶었습니다.

이 정보에 대해서는 Credit이 Eric Hammond 에게 갑니다 .

EC2 인스턴스의 루트 EBS 볼륨에서 파일 수정

다음과 같은 재난 상황을 고려한 경우에도 EC2 인스턴스의 루트 EBS 볼륨에서 파일을 검사하고 편집 할 수 있습니다.

  • ssh 키를 분실했거나 비밀번호를 잊어 버렸습니다
  • / etc / sudoers 파일을 편집하는 중에 실수를했으며 더 이상 sudo를 사용하여 루트 액세스 권한을 얻을 수 없습니다.
  • 장기 실행 인스턴스가 어떤 이유로 중단되어 접속할 수 없으며 올바르게 부팅되지 않음
  • 인스턴스에서 파일을 복구해야하지만 액세스 할 수 없습니다

책상에 앉아있는 실제 컴퓨터에서는 CD 또는 USB 스틱으로 시스템을 부팅하고 하드 드라이브를 마운트하고 파일을 확인 및 수정 한 다음 컴퓨터를 재부팅하여 업무를 다시 시작할 수 있습니다.

그러나 이러한 상황 중 하나에 있으면 원격 EC2 인스턴스가 먼 거리에 있고 액세스 할 수없는 것 같습니다. 다행히 AWS는 인스턴스 저장소가 아닌 EBS 부팅 인스턴스를 실행하는 경우 이와 같은 시스템을 복구 할 수있는 강력한 기능과 유연성을 제공합니다.

EC2에 대한 접근 방식은 물리적 솔루션과 다소 유사하지만 결함이있는 "하드 드라이브"(루트 EBS 볼륨)를 다른 인스턴스로 이동하고 마운트 한 다음 수정 한 다음 다시 이동합니다.

경우에 따라 새 EC2 인스턴스를 시작하고 나쁜 인스턴스를 버리는 것이 더 쉬울 수도 있지만 실제로 파일을 수정하려는 경우 다음과 같은 접근 방식이 있습니다.

설정

보고 편집하려는 파일이있는 깨진 루트 EBS 볼륨이 포함 된 원본 인스턴스 (A)와 볼륨을 식별하십시오.

instance_a=i-XXXXXXXX

volume=$(ec2-describe-instances $instance_a |
  egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)

원래 EBS 볼륨에서 파일을 수정하는 데 사용할 두 번째 EC2 인스턴스 (B)를 식별하십시오. 이 인스턴스는 EBS 볼륨을 연결할 수 있도록 인스턴스 A와 동일한 가용 영역에서 실행되고 있어야합니다. 인스턴스가 아직 실행 중이 아닌 경우 임시 인스턴스를 시작하십시오.

instance_b=i-YYYYYYYY

손상된 인스턴스 A를 중지하고 (완전히 중지 될 때까지) 인스턴스에서 루트 EBS 볼륨을 분리 한 후 (분리 될 때까지) 볼륨을 사용하지 않는 디바이스의 인스턴스 B에 연결하십시오.

ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume

인스턴스 B로 ssh하고 파일 시스템에 액세스 할 수 있도록 볼륨을 마운트하십시오.

ssh ...instance b...

sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a

해결

이 시점에서 인스턴스 A의 전체 루트 파일 시스템을 인스턴스 B의 / vol-a에서보고 편집 할 수 있습니다. 예를 들어 다음을 수행 할 수 있습니다.

  • 올바른 ssh 키를 /vol-a/home/ubuntu/.ssh/authorized_keys에 넣으십시오.
  • / vol-a / etc / sudoers 편집 및 수정
  • / vol-a / var / log / syslog에서 오류 메시지를 찾으십시오.
  • / vol-a /…에서 중요한 파일을 복사하십시오.

참고 : 두 인스턴스의 uid가 동일하지 않을 수 있으므로 루트가 아닌 사용자에게 속한 파일을 작성, 편집 또는 복사하는 경우주의하십시오. 예를 들어, 인스턴스 A의 mysql 사용자는 인스턴스 B의 postfix 사용자와 동일한 UID를 가질 수 있으며, 이름이 하나 인 파일을 숨기고 볼륨을 다시 A로 이동하면 문제가 발생할 수 있습니다.

마무리

작업을 마치고 / vol-a 아래의 파일에 만족하면 파일 시스템을 마운트 해제합니다 (인스턴스 -B에서 계속).

sudo umount /vol-a
sudo rmdir /vol-a

이제 ec2-api-tools를 사용하여 시스템으로 돌아가서 EBS 볼륨을 원래 인스턴스 A의 홈으로 다시 이동 한 다음 인스턴스를 다시 시작하십시오.

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

바라건대, 당신은 문제를 고쳤고, 인스턴스 A는 잘 나오고, 원래 시작한 것을 성취 할 수 있습니다. 그렇지 않은 경우 작동 할 때까지이 단계를 계속 반복해야 할 수도 있습니다.

참고 : 인스턴스 A를 중지 할 때 인스턴스 A에 할당 된 탄력적 IP 주소가있는 경우 다시 시작한 후 다시 연결해야합니다.

생각해 내다! 이 프로세스를 위해 인스턴스 B가 일시적으로 시작된 경우 지금 종료하는 것을 잊지 마십시오.


이에 대한 단계별 가이드를 알려 주시겠습니까? 필자의 경우 기존 실행 인스턴스가 있으며 개인 키가없는 원격 위치에서 로그인해야합니다.
Jus12

87

실행중인 EC2 인스턴스에 키 페어를 직접 추가 할 수는 없지만 Linux 사용자를 생성하고 새 키 페어를 생성 한 다음 원래 사용자의 키 페어와 마찬가지로 사용할 수 있습니다.

귀하의 경우 인스턴스 소유자 (생성자)에게 다음을 수행하도록 요청할 수 있습니다. 따라서 인스턴스 소유자는 자신의 키를 사용자와 공유 할 필요는 없지만 여전히 이러한 인스턴스로 ssh 할 수 있습니다. 이 단계는 원래 Utkarsh Sengar (일명 @zengr )가 http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/에 게시했습니다 . 몇 가지 작은 변경 사항 만 적용했습니다.

  1. 1 단계 : 기본적으로 "ubuntu"사용자 로그인 :

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  2. 2 단계 : 새 사용자를 만들면 새 사용자를 "john"이라고합니다 .

    [ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
    

    다음과 같이 "john"의 비밀번호를 설정하십시오.

    [ubuntu@ip-11-111-111-111 ~]$ sudo su -
    [root@ip-11-111-111-111 ubuntu]# passwd john
    

    다음과 같이 sudoer의 목록에“john”을 추가하십시오.

    [root@ip-11-111-111-111 ubuntu]# visudo
    

    .. 파일 끝에 다음을 추가하십시오.

    john   ALL = (ALL)    ALL
    

    좋구나! 새 사용자를 만들었습니다. 이제 1 단계에서 my_orin_key.pem을 사용하는 것처럼 로그인하는 데 필요한 키 파일을 생성해야합니다.

    이제 종료하고 루트에서 우분투로 돌아갑니다.

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. 3 단계 : 공개 키와 개인 키를 생성 :

    [ubuntu@ip-11-111-111-111 ~]$ su john
    

    2 단계에서“john”에 대해 생성 한 비밀번호를 입력 한 다음 키 페어를 생성하십시오. 키 페어의 암호는 4 자 이상이어야합니다.

    [john@ip-11-111-111-111 ubuntu]$ cd /home/john/
    [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa
    [john@ip-11-111-111-111 ~]$ mkdir .ssh
    [john@ip-11-111-111-111 ~]$ chmod 700 .ssh
    [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh
    

    위의 단계에서 john은 우리가 만든 사용자이고 ubuntu는 기본 사용자 그룹입니다.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. 4 단계 : 이제“john”이라는 키를 다운로드하면됩니다 . scp를 사용하여 EC2에서 파일을 다운로드 / 업로드합니다. 다음은 그 방법입니다.

    해당 사용자 이름의 키만 있기 때문에 여전히 우분투 사용자를 사용하여 파일을 복사해야합니다 . 따라서 키를 우분투 폴더로 옮기고 chmod를 777로 바꿔야합니다.

    [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/
    [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
    

    이제 my_orig_key.pem 파일이있는 로컬 컴퓨터 터미널로 이동하여 다음을 수행하십시오.

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem ubuntu@111.111.11.111:/home/ubuntu/john john
    

    위의 명령은“john”키를 로컬 컴퓨터의 현재 작업 디렉토리로 복사합니다. 키를 로컬 컴퓨터에 복사 한 후에는 개인 키이므로 "/ home / ubuntu / john"을 삭제해야합니다.

    이제 로컬 컴퓨터 중 하나를 600으로 설정하십시오.

    $ chmod 600 john
    
  5. 5 단계 : 키 테스트 시간 :

    $ ssh -i john john@111.111.11.111
    

따라서이 방법으로 여러 사용자가 하나의 EC2 인스턴스를 사용하도록 설정할 수 있습니다 !!


4
이것은 유용하지만 마지막 단계로 원격 시스템에서 개인 키를 삭제하지 않아야합니까? 그렇게하면 인스턴스에 액세스 할 수있는 다른 사람도 인스턴스를 복사하고 키를 사용하여 로그인 할 수 없습니다.
culix

이것은 나를 위해 작동합니다. 그러나 내가 작업 할 파일이 우분투 사용자 디렉토리에 있기 때문에 여기서 우분투 사용자로 어떻게 이동합니까? 이렇게하면 john 사용자 그룹으로 이동합니다. 우분투 14.04.4 LTS
olyjosh

이것은 나를 위해 작동하지 않았습니다. 잘못된 권한을 부여했습니다. ec2 콘솔에서 키 페어를 만들어야했는데 작동하기 시작했습니다.
다크 나이트

11

로컬 머신에서 다음 명령을 실행하십시오.

ssh-keygen -t rsa -C "SomeAlias"

해당 명령이 실행 된 후 * .pub로 끝나는 파일이 생성됩니다. 해당 파일의 내용을 복사하십시오.

Amazon 시스템에서 ~ / .ssh / authorized_keys를 편집하고 * .pub 파일의 내용을 붙여넣고 기존 내용을 먼저 제거하십시오.

그런 다음 ssh-keygen 명령 (개인 키)에서 생성 된 다른 파일을 사용하여 SSH를 수행 할 수 있습니다.


@Dan이 언급했듯이이 파일을 편집하는 인스턴스에 대한 액세스를 변경할 수 있지만 메타 데이터 수준에서 인스턴스와 연관된 키 페어를 변경할 수는 없습니다. 공개 키 끝에 .pem 파일 이름을 추가하는 것을 잊지 마십시오. 예 :ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti

7

이것은 이전에 나에게 발생했으며 (다른 사람이 생성했지만 AWS 웹 콘솔에 액세스 할 수있는 EC2 인스턴스에 액세스 할 수 없었습니다) http://readystate4.com/2013/04/09/aws-gaining- ssh-access-to-an-ec2-instance-you-lost-access-to /

기본적으로 EBS 드라이브를 분리하여 액세스 할 수있는 EC2에 연결할 수 있습니다. ~ec2-user/.ssh/authorized_keys이 연결된 드라이브에 SSH pub 키를 추가하십시오 . 그런 다음 이전 EC2 인스턴스에 다시 넣습니다. Amazon AMI를 사용한 링크의 단계별.

스냅 샷을 만들거나 복제 된 새 인스턴스를 만들 필요가 없습니다.


6

필자의 경우이 설명서를 사용하여 키 페어를 Elastic Beanstalk 인스턴스와 연결했습니다.

중대한

Elastic Beanstalk 제공 Amazon EC2 인스턴스에 액세스하려면 Amazon EC2 키 페어를 생성하고 Elastic Beanstalk 제공 Amazon EC2 인스턴스가 Amazon EC2 키 페어를 사용하도록 구성해야합니다. AWS Management Console을 사용하여 Amazon EC2 키 페어를 설정할 수 있습니다. Amazon EC2의 키 페어 생성에 대한 지침은 Amazon Elastic Compute Cloud 시작 안내서를 참조하십시오.

Elastic Beanstalk를 사용하여 Amazon EC2 서버 인스턴스 구성


1
감사합니다, @ kamal-essajidi! EB를 사용하는 다른 사용자의 경우 : 키 페어가 있으면 구성> 인스턴스> EC2 키 페어에서 Elastic Beanstalk에 추가 할 수 있습니다.
Scott

4

다음 명령으로 인스턴스에 새 키를 추가 할 수 있습니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

~ / .ssh 구성에서 domain_alias를 구성 할 수 있습니다

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem

4

콘솔을 통해 새로운 키 페어를 추가하는 쉬운 방법을 찾지 못했지만 수동으로 할 수 있습니다.

기존 키 페어를 사용하여 EC2 상자에 ssh하십시오. 그런 다음 ~ / .ssh / authorized_keys를 편집하고 새 키를 새 줄에 추가하십시오. 새 머신을 통해 종료하고 ssh하십시오. 성공!



3

Elasticbeanstalk 환경의 경우 다음과 같이 실행중인 인스턴스에 키-값 쌍을 적용 할 수 있습니다.

  • EC2-> 키 페어 (NETWORK & SECURITY 탭 아래)에서 키-값 페어 생성
  • Elasticbeanstalk로 이동하여 애플리케이션을 클릭하십시오
  • 구성 페이지로 이동하여 보안 설정을 수정하십시오.
  • EC2 키 페어를 선택하고 적용을 클릭하십시오
  • 확인을 클릭하여 업데이트를 확인하십시오. 환경을 종료하고 키 값을 환경에 적용합니다.

1

실제로 Elastic Beanstalk 구성 페이지를 통해 키 페어를 추가 할 수 있습니다. 그런 다음 인스턴스가 다시 시작되고 모든 것이 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.