จะดาวน์โหลดกุญแจสาธารณะจาก Amazon AWS ได้อย่างไร


25

ฉันมีอินสแตนซ์ amazon ec2 linux ที่ทำงานอยู่ที่เกี่ยวข้องกับ keypair (p1) และฉันได้ดาวน์โหลดรหัสส่วนตัวไปยังเดสก์ท็อปที่บ้านของฉัน ตอนนี้ที่ทำงานฉันได้สร้าง keypair (p2) บนเดสก์ท็อปที่ทำงานของฉันและนำเข้ากุญแจสาธารณะไปยัง Amazon ผ่านทางคอนโซล AWS

ที่บ้านฉันต้องการเพิ่มกุญแจสาธารณะของ keypair p2 ที่จะเพิ่มในauthorized_keysอินสแตนซ์ AMI ของฉัน (ซึ่งปัจจุบันฉันสามารถเข้าถึงได้จากที่บ้านเท่านั้น) อย่างไรก็ตามฉันลืมนำกุญแจสาธารณะของ p2 ติดตัวไปด้วยดังนั้นจึงเป็นไปได้หรือไม่ที่จะส่งออกกุญแจสาธารณะนี้จาก Amazon

คำตอบ:


6

ปริศนาดีขอบคุณ! นี่คือหนึ่งคำตอบ:

  1. เริ่มการบูต EBS ชั่วคราวใหม่อินสแตนซ์ t1.micro A โดยระบุ keypair p2 ระบุโซนความพร้อมใช้งานที่คุณมีอินสแตนซ์ B อื่นที่กำลังทำงานอยู่และที่คุณสามารถเข้าถึงได้ (เริ่มชั่วคราวถ้าจำเป็น)

  2. หยุด (ไม่สิ้นสุด) อินสแตนซ์ A หลังจากที่อยู่ในสถานะกำลังทำงานเป็นเวลาสองสามนาทีดังนั้นจึงมีโอกาสที่จะบันทึกพับลิกคีย์ไปยังไฟล์ authorized_keys

  3. แยกโวลุ่ม EBS ออกจากอินสแตนซ์ที่หยุดทำงาน A. แนบและเมานต์กับอินสแตนซ์ที่คุณใช้งาน B

  4. คัดลอกกุญแจสาธารณะจากระบบไฟล์ที่เมาท์

  5. แยกและลบโวลุ่ม EBS ยุติอินสแตนซ์ชั่วคราว A


1
ไม่แน่ใจว่าสิ่งนี้จะแก้ปัญหาคำถามจริงได้อย่างไร ... เป็นวิธีหนึ่งที่จะจัดการกับอินสแตนซ์ AWS EC2 หากและถ้าคุณใช้อินสแตนซ์ที่ได้รับการสนับสนุนจาก EBS
Jeremy Bouse

คุณไม่จำเป็นต้องใช้อินสแตนซ์สำหรับเริ่มระบบ EBS ยกเว้นครั้งเดียวที่คุณเรียกใช้อินสแตนซ์ชั่วคราวเพื่อนำรหัสสาธารณะออก สิ่งที่คุณต้องการทำคือรับกุญแจสาธารณะที่ใช้วิธีนี้
Eric Hammond

1
หากคุณมีรหัสส่วนตัวคุณสามารถสร้างรหัสสาธารณะใหม่ได้โดยไม่ต้องผ่านมาตรการดังกล่าว
Jeremy Bouse

2
Jeremy: ตามคำถามเดิมรหัสส่วนตัวจะกลับมาที่สำนักงานของเขาซึ่งเขาไม่สามารถรับได้ และเมื่อเขากลับมาที่สำนักงานเขาจะไม่สามารถเข้าสู่อินสแตนซ์ของ EC2 ได้เนื่องจากไม่มีรหัสสาธารณะสำหรับรหัสส่วนตัวของสำนักงานนั้น นั่นเป็นเหตุผลที่เขาต้องการรับกุญแจสาธารณะจาก Amazon และวิธีเดียวที่จะทำเช่นนั้นก็คือการเริ่มต้นอินสแตนซ์ด้วยรหัสสาธารณะนั้น จากนั้นคุณต้องถอดกุญแจสาธารณะออกจากอินสแตนซ์นั้นซึ่งเป็นส่วนที่ยุ่งยาก
Eric Hammond

1
ว้าว! ทำงานเป็นจำนวนมากเพื่อรับกุญแจสาธารณะ มันง่ายกว่าที่ Amazon จะใส่ตัวเลือก "ส่งออกกุญแจสาธารณะ"
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 ที่มีไฟล์ด้านบนเป็นสคริปต์ข้อมูลผู้ใช้ ระบุ keypair ที่คุณต้องการดึงกุญแจสาธารณะ 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 สาธารณะของคุณ ระบุ id อินสแตนซ์ที่ส่งคืนจากคำสั่ง run-instance:

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)

อินสแตนซ์ชั่วคราวจะยุติตัวเองโดยอัตโนมัติภายในไม่ถึงหนึ่งชั่วโมง แต่คุณสามารถยกเลิกได้ด้วยตนเองหากคุณต้องการตรวจสอบให้แน่ใจว่าคุณไม่ถูกเรียกเก็บเงินเกินกว่าสองเซ็นต์ซึ่งจะมีค่าใช้จ่ายในการทำงาน


ฉันลองสิ่งนี้ด้วยการติดตั้ง awscli ที่ทันสมัยและทำงานกับสคริปต์ข้อมูลผู้ใช้ของคุณ อย่างไรก็ตามฉันต้องปรับคำสั่งเล็กน้อย สิ่งนี้ใช้ได้กับภูมิภาค eu-west-1: aws รัน EC2 อินสแตนซ์ - คีย์ชื่อ mykey --instance-type t1.micro - อินสแตนซ์เริ่มต้น - ปิด - พฤติกรรม - ยุติ - ไฟล์ข้อมูลผู้ใช้: // เอาท์พุท - 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 ไม่สนับสนุนการกด 2 คู่คีย์เมื่อเริ่มต้นอินสแตนซ์ EC2 นี่เป็นแบบฝึกหัดที่ผู้ดูแลระบบต้องทำด้วยวิธีการอื่น

หากคุณสามารถเข้าถึงรหัสประจำตัวที่ได้รับอนุญาตแล้วคุณสามารถดำเนินการคำสั่งssh-copy-idต่อไปนี้:

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

การทำเช่นนี้จะเป็นการคัดลอกกุญแจสาธารณะที่กำหนดไปยังเซิร์ฟเวอร์และลงใน~user/.ssh/authorized_keysไฟล์โดยอัตโนมัติเพื่อให้คุณและรับรองสิทธิ์ที่เหมาะสมของไฟล์

วิธีที่หรูหรากว่าคือการรวมรหัสประจำตัวเพิ่มเติมในกระบวนการจัดการการกำหนดค่าของคุณ ในกรณีของฉันสิ่งนี้เกี่ยวข้องกับการเพิ่มคีย์เพิ่มเติมในการกำหนดค่าหุ่นกระบอกสำหรับโหนด

ในฐานะที่เป็นบันทึกด้านการตั้งค่าส่วนตัว แต่จะใช้วิธีการจัดการคีย์ 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> URLและอ่านคีย์จาก authorized_keys ของผู้ใช้ ec2_user, อูบุนตูหรือที่เรียกว่า

มีเพียงสิ่งเดียวเท่านั้น - คุณต้องทำให้เครื่องสามารถเข้าถึงได้แบบสาธารณะและให้แน่ใจว่าสามารถเข้าถึงพอร์ต 22 ได้จากภายนอก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.