Amazon AWS에서 퍼블릭 키를 다운로드하는 방법은 무엇입니까?


25

키 쌍 (p1)과 연결된 실행중인 Amazon EC2 Linux 인스턴스가 있고 개인 키를 홈 데스크톱으로 다운로드했습니다. 이제 직장에서 업무용 데스크탑에 키 페어 (p2)를 생성하고 AWS 콘솔을 통해 퍼블릭 키를 Amazon으로 가져 왔습니다.

집에서는 authorized_keysAMI 인스턴스 (현재 집에서만 액세스 할 수 있음)에 추가 할 키 쌍 p2의 공개 키를 추가하고 싶습니다 . 그러나 p2의 공개 키를 가져 와서 잊어 버렸으므로 Amazon 에서이 공개 키를 어떻게 내보낼 수 있습니까?

답변:


6

좋은 퍼즐, 고마워! 한 가지 답변이 있습니다.

  1. 키 쌍 p2를 지정하여 새로운 임시 EBS 부팅 t1.micro 인스턴스 A를 시작하십시오. 다른 인스턴스 B가 이미 실행 중이고 액세스 권한이있는 가용 영역을 지정하십시오. (필요한 경우 임시 시작).

  2. 몇 분 동안 실행 상태에있는 인스턴스 A를 중지 (종료하지 않음)하여 공개 키를 authorized_keys 파일에 저장할 수 있습니다.

  3. 중지 된 인스턴스 A에서 루트 EBS 볼륨을 분리하십시오. 실행중인 인스턴스 B에 연결하고 마운트하십시오.

  4. 마운트 된 파일 시스템에서 공개 키를 복사하십시오.

  5. EBS 볼륨을 분리하고 삭제하십시오. 임시 인스턴스 A를 종료하십시오.


1
이것이 실제로 원래의 질문을 어떻게 해결하는지 잘 모르겠습니다 .EBS 지원 인스턴스를 사용하는 경우에만 AWS EC2 인스턴스를 처리하는 한 가지 방법입니다.
Jeremy Bouse

퍼블릭 키를 얻기 위해 임시 인스턴스를 한 번만 실행하는 경우를 제외하고 EBS 부팅 인스턴스를 사용할 필요는 없습니다. 이 접근 방식이 수행하는 공개 키를 얻으면됩니다.
Eric Hammond

1
개인 키가있는 경우 이러한 조치를 거치지 않고 공개 키를 다시 생성 할 수 있습니다.
Jeremy Bouse

2
제레미 : 원래 질문에 근거하여 개인 키는 사무실로 돌아와서 얻을 수 없었습니다. 그리고 사무실로 돌아온 후에는 해당 사무실 개인 키에 대한 공개 키가 없기 때문에 EC2 인스턴스에 액세스 할 수 없습니다. 그렇기 때문에 Amazon에서 퍼블릭 키를 얻고 자하는 유일한 방법은 퍼블릭 키로 인스턴스를 시작하는 것입니다. 그런 다음 까다로운 부분 인 인스턴스에서 공개 키를 가져와야합니다.
Eric Hammond

1
와우! 공개 키를 얻기위한 많은 작업. 아마존이 "공개 키 내보내기"옵션을 사용하는 것이 더 쉬웠을 것입니다.
Jus12

37

그러나 올바른 ssh-keygen 명령은 다음과 같습니다.

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

이것은 이전 답변에 대한 의견 또는 제안 된 수정 사항이어야합니다. 그래도 맞습니다.
JCotton

당신은 이것이 주석 일 것임이 맞습니다. 불행히도, 나는 아직 언급 할 권한이 없습니다 :-(
rsmoorthy

하하, 잘가요. 수정에 도움을 주셔서 감사합니다.
JCotton

이 답변은 개인 키에 액세스 할 수 있었지만 원래 질문에서 개인 키가 다른 위치에 있고 액세스 할 수없는 경우 작동합니다.
Eric Hammond

1
chmod 400 your_private_key.pem"권한이 너무 열려 있습니다"오류가 발생하면 실행
crizCraig

7

이미 EBS 볼륨을 사용하여 ssh 공개 키를 얻는 하나의 답변을 제공했지만 공개 키를 콘솔 출력으로 보내는 사용자 데이터 스크립트로 임시 EC2 인스턴스를 시작하여 얻을 수있는 또 다른 방법이 있습니다. 단계는 다음과 같습니다.

다음 코드를 output-ssh-key.userdata로컬 컴퓨터 의 파일에 저장하십시오 . 이 명령을 로컬로 실행하지 마십시오!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

위 파일을 사용자 데이터 스크립트로 사용하여 스톡 Ubuntu 10.04 LTS 인스턴스를 실행하십시오. 공개 ssh 키를 검색하려는 키 쌍을 지정하십시오.

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

퍼블릭 ssh 키가 표시 될 때까지 인스턴스에서 콘솔 출력을 계속 요청하십시오. run-instances 명령에서 리턴 된 인스턴스 ID를 지정하십시오.

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

2-10 분 안에 다음과 같이 출력됩니다 :

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

임시 인스턴스는 한 시간 안에 자동으로 종료되지만 실행 비용이 2 센트 이상 청구되지 않도록하려면 직접 종료 할 수 있습니다.


현대적인 awscli 설치 로이 작업을 시도했으며 사용자 데이터 스크립트와 함께 작동했습니다. 그러나 나는 명령을 약간 조정해야했습니다. 이것은 eu-west-1 지역에서 작동했습니다. ssh-key.userdata --image-id ami-c1167eb8; AWS ec2 get-console-output --instance-id i-0ce56c0e02086160d; aws ec2 종료 인스턴스 --instance-id i-0ce56c0e02086160d
holmb

(편집 됨) 여기에 형식 지정이 끔찍합니다. 다른 답변으로 게시하겠습니다.
Bernhard

5

개인 SSH 키가있는 경우 다음 ssh-keygen 명령 을 실행하여 공개 키 구성 요소를 다시 생성 할 수 있습니다 .

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

AWS 콘솔과 API는 EC2 인스턴스를 시작할 때 2 개의 키 페어 푸시를 지원하지 않습니다. 이것은 시스템 관리자가 다른 방법을 통해 수행해야하는 연습입니다.

이미 인증 된 ID 키에 액세스 할 수 있으면 다음 ssh-copy-id 명령을 간단히 수행 할 수 있습니다 .

 ssh-copy-id -i /path/to/public-key user@EC2-instance

그러면 지정된 공개 키가 서버와 ~user/.ssh/authorized_keys파일에 자동으로 복사되어 파일에 대한 적절한 권한이 보장됩니다.

보다 우아한 방법은 구성 관리 프로세스에 추가 ID 키를 포함시키는 것입니다. 필자의 경우 노드 의 Puppet 구성에 추가 키를 추가 해야합니다.

참고로 개인 취향은 있지만 직장과 집 위치에 별도의 키를 포함시키는 것보다 더 나은 SSH 키 관리 방법을 사용합니다. 이전 질문 에서 언급했듯이 사용하는 컴퓨터가 아닌 USB 드라이브에 키를 보관합니다.


0

또 다른 옵션은 user_data에 루트에 다른 ssh 키를 추가하는 짧은 스크립트를 추가하는 것입니다.

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

그런 다음 ssh -l root -i <KEYFILE> URLec2_user, ubuntu 사용자의 authorized_keys에서 키를 읽거나 호출 하여 루트로 시스템에 로그인 할 수 있습니다 .

기계를 공개적으로 접근 할 수있게하고 외부에서 포트 22에 접근 할 수 있어야합니다.

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