[amazon-web-services] 기존 EC2 인스턴스에 키 페어 추가

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

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



답변

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

복구를 위해 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가 일시적으로 시작된 경우 지금 종료하는 것을 잊지 마십시오.


답변

실행중인 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 인스턴스를 사용하도록 설정할 수 있습니다 !!


답변

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

ssh-keygen -t rsa -C "SomeAlias"

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

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

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


답변

이것은 이전에 나에게 발생했으며 (다른 사람이 생성했지만 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를 사용한 링크의 단계별.

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


답변

필자의 경우이 설명서를 사용하여 키 페어를 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 서버 인스턴스 구성


답변

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

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


답변

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

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