รหัสผ่าน Windows จะไม่ถอดรหัสบน AWS EC2 แม้จะมีรหัสส่วนตัวที่ถูกต้อง


21

ฉันสร้างอินสแตนซ์ Windows ใหม่บน AWS EC2 โดยใช้รหัสคู่ที่ฉันสร้างโดยการอัพโหลดกุญแจสาธารณะของฉันจากเครื่องท้องถิ่น

อินสแตนซ์เปิดใช้งานได้ดี แต่จะไม่ถอดรหัสรหัสผ่าน มันรายงาน:

ไพรเวตคีย์ต้องเริ่มต้นด้วย "----- BEGIN คีย์ส่วนตัว RSA -----" และลงท้ายด้วย "----- สิ้นสุดคีย์ส่วนตัว RSA -----"

ฉันแน่ใจว่าฉันอัปโหลดคีย์ที่ถูกต้อง ฉันได้รับการตรวจสอบว่าลายนิ้วมือตรงกับรูปแบบที่แปลกลายนิ้วมือ AWS ใช้ แต่มันจะไม่ถอดรหัส

ฉันลองอัปโหลดไฟล์คีย์และวางลงในแบบฟอร์ม

ในที่สุดฉันก็พบว่ามันไม่ได้ตัดบรรทัดใหม่ที่ต่อท้ายและลบบรรทัดว่างในคีย์ นั่นทำให้ฉันเกิดข้อผิดพลาดใหม่เมื่อฉันคลิก "Decrypt Password" แต่:

มีข้อผิดพลาดในการถอดรหัสรหัสผ่านของคุณ  โปรดตรวจสอบให้แน่ใจว่าคุณป้อนรหัสส่วนตัวของคุณถูกต้อง

คำตอบ:


22

การจัดการคีย์ของ AWS EC2 ไม่ได้จัดการกับคีย์ส่วนตัว SSH ที่มีการตั้งรหัสผ่าน (เข้ารหัส) มันไม่ตรวจจับสิ่งนี้และก็ล้มเหลวโดยมีข้อผิดพลาดที่ไม่ทราบสาเหตุ

หากรหัสส่วนตัวของคุณถูกเข้ารหัสไว้ในดิสก์ (เช่นควรเป็น IMO) คุณต้องถอดรหัสเพื่อวางลงในคอนโซลของ AWS

แทนที่จะทำอย่างนั้นให้พิจารณาถอดรหัสรหัสผ่านในเครื่องดังนั้นคุณไม่จำเป็นต้องส่งรหัสส่วนตัวของคุณไปยัง AWS รับข้อมูลรหัสผ่านที่เข้ารหัส (เข้ารหัส 64) จากบันทึกเซิร์ฟเวอร์หลังจากเริ่มต้นหรือใช้get-password-dataหรือคำขอ API ที่เกี่ยวข้อง

จากนั้นคุณสามารถถอดรหัส base64 และถอดรหัสผลลัพธ์:

base64 -d /tmp/file | openssl rsautl -decrypt -inkey /path/to/aws/private/key.pem

(ยอมรับคีย์ส่วนตัวของ OpenSSH openssl rsautl)

ปัญหาเกี่ยวกับความล้มเหลวในการจัดการรหัสป้องกันด้วยรหัสผ่านที่มีข้อผิดพลาดที่เป็นประโยชน์ก็มีผลกับec2-get-passwordคำสั่งด้วยเช่นกัน

ดูสิ่งนี้ด้วย:


1
ขอบคุณ นี่คือบรรทัดคำสั่งที่สมบูรณ์ที่ฉันใช้ทำตามคำแนะนำของคุณ: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} (ใช้aws-cliและ jq )
Ben Butler-Cole

base64 บ่นเรื่อง-dเพื่อให้-Dการทำงานสำหรับฉัน im บน OS X
Saad Masood

2
ใน OS X ฉันจะเพิ่มคำสั่งอีกหนึ่งคำสั่งลงในไพพ์นั้น: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} | pbcopy ... ซึ่งส่งรหัสผ่านไปยังคลิปบอร์ดของคุณโดยตรง
Mark Maglana

1
ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้องของ IMHO เนื่องจากคำตอบของคนอื่นนั้นค่อนข้างไม่ปลอดภัยเมื่อเทียบกับเว็บนี้
webofmars

4

หากไม่มีการใช้ jq สิ่งนี้ยังคงเป็นไปได้ แต่ต้องการการแยกวิเคราะห์ข้อมูลที่ส่งคืนเพิ่มเติม

aws ec2 get-password-data "--instance-id=${instance_id}" --query 'PasswordData' | sed 's/\"\\r\\n//' | sed 's/\\r\\n\"//' | base64 -D | openssl rsautl -inkey ${my_key} -decrypt

ดีทำงานบน WSL อูบุนตูผมต้องใช้มากกว่าbase64 -d -D
เซทสโตน

3

นี่คือสิ่งที่ใช้ได้กับฉันใน macOS:

openssl rsa -in $HOME/.ssh/aws-remote -out /Users/home/desktop/unencrypted-rsa.txt

เป็นที่สังเกตได้ว่าคุณสามารถบอกได้ว่าไฟล์. pem ของคุณถูกเข้ารหัสด้วยรหัสผ่านหรือไม่โดยค้นหาบรรทัดต่อไปนี้ หากมีอยู่คุณต้องถอดรหัสก่อนใช้กับ Amazon:

Proc-Type: 4,ENCRYPTED

สำหรับฉันมันเป็นทางออก AWS UI ไม่พบว่ารหัสผ่านได้รับการป้องกันและคุณต้องถอดรหัสก่อน นี่เป็นสิ่งที่ไม่ปลอดภัย ดังนั้นลบไฟล์ถอดรหัสหลังจากนั้น
webofmars

2

บน Mac ของฉันอาร์กิวเมนต์บรรทัดคำสั่งสำหรับ base64 แตกต่างกัน

สิ่งนี้ใช้ได้กับฉัน:

base64 -D -i /tmp/file | openssl rsautl -decrypt -inkey /path/to/key.pem

-1
  1. ไปที่แดชบอร์ด ec2
  2. ลบคีย์ที่มีอยู่
  3. สร้างคู่กุญแจใหม่
  4. เลือกชื่อ
  5. ดาวน์โหลดและเก็บไว้ในเครื่อง
  6. เปิดตัวอินสแตนซ์และดาวน์โหลดสำเนาอินสแตนซ์ของ windows
  7. ตั้งชื่อ keypair ใหม่ด้วยชื่อที่ใช้ในขั้นตอนที่ 4
  8. ใช้รหัสที่สร้างขึ้นใหม่นี้เพื่อถอดรหัสรหัสผ่าน

สิ่งนี้จะได้ผล


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