답변:
좋은 퍼즐, 고마워! 한 가지 답변이 있습니다.
키 쌍 p2를 지정하여 새로운 임시 EBS 부팅 t1.micro 인스턴스 A를 시작하십시오. 다른 인스턴스 B가 이미 실행 중이고 액세스 권한이있는 가용 영역을 지정하십시오. (필요한 경우 임시 시작).
몇 분 동안 실행 상태에있는 인스턴스 A를 중지 (종료하지 않음)하여 공개 키를 authorized_keys 파일에 저장할 수 있습니다.
중지 된 인스턴스 A에서 루트 EBS 볼륨을 분리하십시오. 실행중인 인스턴스 B에 연결하고 마운트하십시오.
마운트 된 파일 시스템에서 공개 키를 복사하십시오.
EBS 볼륨을 분리하고 삭제하십시오. 임시 인스턴스 A를 종료하십시오.
그러나 올바른 ssh-keygen 명령은 다음과 같습니다.
ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
chmod 400 your_private_key.pem
"권한이 너무 열려 있습니다"오류가 발생하면 실행
이미 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 센트 이상 청구되지 않도록하려면 직접 종료 할 수 있습니다.
개인 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 드라이브에 키를 보관합니다.
또 다른 옵션은 user_data에 루트에 다른 ssh 키를 추가하는 짧은 스크립트를 추가하는 것입니다.
#!/bin/bash
touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys
echo "<KEY>" >> ~/.ssh/authorized_keys
그런 다음 ssh -l root -i <KEYFILE> URL
ec2_user, ubuntu 사용자의 authorized_keys에서 키를 읽거나 호출 하여 루트로 시스템에 로그인 할 수 있습니다 .
기계를 공개적으로 접근 할 수있게하고 외부에서 포트 22에 접근 할 수 있어야합니다.