Bagaimana cara mengunduh kunci publik dari Amazon AWS?

25

Saya memiliki instance linux amazon ec2 yang terkait dengan keypair (p1) dan saya telah mengunduh kunci pribadi ke desktop rumah saya. Sekarang di tempat kerja, saya membuat keypair (p2) di desktop pekerjaan saya dan mengimpor kunci publik ke Amazon melalui konsol AWS.

Di rumah, saya ingin menambahkan kunci publik keypair p2 yang akan ditambahkan ke authorized_keysinstance AMI saya (yang saat ini hanya dapat saya akses dari rumah). Namun, saya lupa membawa kunci publik p2, jadi mungkinkah mengekspor kunci publik ini dari Amazon.

Jus12
sumber

Jawaban:

6

Teka-teki yang bagus, terima kasih! Inilah satu jawaban:

  1. Mulai, boot EBS baru sementara t1.micro instance A, tentukan keypair p2. Tentukan zona ketersediaan di mana Anda memiliki instance B lain sudah berjalan dan ke mana Anda memiliki akses. (Mulai sementara jika diperlukan).

  2. Hentikan (tidak menghentikan) instance A setelah telah dalam keadaan berjalan selama beberapa menit, sehingga ia memiliki kesempatan untuk menyimpan kunci publik ke file yang diotorisasi.

  3. Lepaskan volume EBS root dari instance yang dihentikan A. Pasang dan pasang ke instance Anda yang sedang berjalan B.

  4. Salin kunci publik dari sistem file yang dipasang.

  5. Lepaskan dan hapus volume EBS. Hentikan instance sementara A.

Eric Hammond
sumber
1
Tidak yakin bagaimana ini benar-benar memecahkan pertanyaan asli ... itu pasti salah satu cara untuk menangani instance AWS EC2 jika dan hanya jika Anda menggunakan instance yang didukung EBS.
Jeremy Bouse
Anda tidak harus menggunakan instance boot EBS kecuali untuk satu kali Anda menjalankan instance sementara untuk mendapatkan kunci publik dari itu. Yang ingin Anda lakukan adalah mendapatkan kunci publik yang dilakukan pendekatan ini.
Eric Hammond
1
Jika Anda memiliki kunci pribadi, Anda dapat membuat kembali kunci publik tanpa melalui langkah-langkah tersebut.
Jeremy Bouse
2
Jeremy: Berdasarkan pertanyaan awal, kunci privat kembali ke kantornya di mana dia tidak bisa mendapatkannya. Dan begitu dia kembali ke kantor, dia tidak bisa masuk ke instance EC2 karena tidak memiliki kunci publik untuk kunci pribadi kantor itu. Itu sebabnya dia ingin mendapatkan kunci publik dari Amazon, dan satu-satunya cara untuk melakukannya adalah memulai sebuah instance dengan kunci publik itu. Maka Anda harus mendapatkan kunci publik dari contoh yang merupakan bagian yang sulit.
Eric Hammond
1
Wow! banyak pekerjaan untuk mendapatkan kunci publik. Akan lebih mudah bagi Amazon untuk menempatkan opsi "Ekspor kunci publik".
Jus12
37

Perintah ssh-keygen yang benar adalah:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
rsmoorthy
sumber
Ini harus berupa komentar atau sunting yang diajukan pada jawaban sebelumnya. Anda benar.
JCotton
Anda benar ini seharusnya komentar. Sayangnya, saya belum mendapatkan hak istimewa untuk berkomentar :-(
rsmoorthy
haha, begitulah. Terima kasih telah membantu dengan koreksi.
JCotton
Jawaban ini akan berfungsi jika ia memiliki akses ke kunci privat, tetapi dalam pertanyaan asli, kunci privat itu berada di lokasi yang berbeda dan tidak dapat diakses.
Eric Hammond
1
jalankan chmod 400 your_private_key.pemjika Anda mendapatkan "Izin kesalahan terlalu terbuka"
crizCraig
7

Saya sudah memberikan satu jawaban yang menggunakan volume EBS untuk mendapatkan kunci publik ssh, tapi inilah cara lain yang bisa Anda lakukan dengan memulai contoh EC2 sementara dengan skrip data pengguna yang mengirimkan kunci publik ke output konsol. Berikut langkah-langkahnya:

Simpan kode berikut ke file yang bernama output-ssh-key.userdatadi komputer lokal Anda. JANGAN LARI PERINTAH INI SECARA LOKAL!

#!/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

Jalankan instance Ubuntu 10.04 LTS stok dengan file di atas sebagai skrip data pengguna. Tentukan keypair tempat Anda ingin mengambil kunci ssh publik:

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

Terus meminta output konsol dari instance sampai menunjukkan kunci ssh publik Anda. Tentukan id instance yang dikembalikan dari perintah run-instances:

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

Dalam 2-10 menit Anda akan mendapatkan output seperti ini:

========================================================================
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)

Mesin virtual sementara akan secara otomatis berakhir dalam waktu kurang dari satu jam, tetapi Anda dapat menghentikannya sendiri jika Anda ingin memastikan bahwa Anda tidak dikenai biaya lebih dari dua sen yang diperlukan untuk menjalankannya.

Eric Hammond
sumber
Saya mencoba ini dengan instalasi awscli modern, dan itu berhasil dengan skrip data pengguna Anda. Namun saya harus menyesuaikan sedikit perintah. Ini bekerja untuk wilayah eu-west-1: aws ec2 run-instance --key-name mykey --instance-type t1.micro --instance-initiated-shutdown-behaviour dihentikan --user-data file: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output --instance-id i-0ce56c0e02086160d; aws ec2 terminate-instance --instance-id i-0ce56c0e02086160d
holmb
(Diedit) Pemformatan ok mengerikan di sini, saya akan memposting sebagai jawaban yang berbeda.
Bernhard
5

Jika Anda memiliki kunci SSH pribadi, Anda dapat membuat ulang komponen kunci publik hanya dengan menjalankan perintah ssh-keygen berikut :

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

Itu adalah bagian yang sederhana ... Konsol AWS dan API tidak mendukung mendorong 2 keypairs ketika memulai instance EC2. Ini adalah latihan yang tersisa untuk administrator sistem lakukan melalui cara lain.

Jika Anda memiliki akses ke kunci identitas yang telah diotorisasi, Anda cukup melakukan perintah ssh-copy-id berikut :

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

Ini akan menyalin kunci publik yang diberikan ke server dan ke dalam ~user/.ssh/authorized_keysfile secara otomatis untuk Anda dan memastikan izin yang tepat pada file tersebut.

Cara yang lebih elegan adalah memasukkan kunci identitas tambahan dalam proses manajemen konfigurasi Anda. Dalam kasus saya ini memerlukan menambahkan kunci tambahan untuk konfigurasi Wayang untuk node.

Sebagai catatan, preferensi pribadi tetapi akan menggunakan metode manajemen kunci SSH yang lebih baik daripada hanya harus memasukkan kunci terpisah untuk lokasi kerja dan rumah. Seperti yang saya sebutkan dalam pertanyaan sebelumnya saya menjaga kunci saya pada drive USB yang saya simpan bukan di komputer mana pun yang saya gunakan.

Jeremy Bouse
sumber
0

Opsi lain adalah menambahkan skrip pendek di user_data yang baru saja menambahkan kunci ssh lain untuk di-root:

#!/bin/bash

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

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

Kemudian Anda dapat login ke mesin sebagai root dengan ssh -l root -i <KEYFILE> URLdan hanya membaca kunci dari otor_keys pengguna ec2_user, ubuntu atau bagaimanapun disebut.

Satu-satunya hal - Anda perlu membuat mesin dapat dijangkau publik, dan memastikan akses ke port 22 dimungkinkan dari luar.

Bernhard
sumber