Anda bertanya tentang bagaimana infrastruktur AWS menghasilkan kunci ssh. Kecuali siapa pun yang bekerja untuk AWS dan diizinkan untuk mengungkapkan informasi itu ( sangat tidak mungkin) maka Anda tidak akan mendapatkan jawaban yang lengkap.
Selain itu, jawaban yang akan Anda cari sepenuhnya tergantung pada virtualisasi back-end apa yang Anda gunakan.
Yang sedang berkata, apa yang tersedia untuk umum dari AWS adalah bahwa mereka sekarang menggunakan KVM
platform virtualisasi buatan sendiri daripada XEN
seperti yang biasa mereka gunakan.
Jadi kita bisa menebak bagaimana AWS melakukannya, atau setidaknya menyediakan metode untuk melakukan ini melalui host kvm. Cara yang paling umum bahwa aku sadar menggunakan virt-sysprep
pada qcow2
gambar dengan --ssh-inject
bendera.
Contoh
pertama buat kunci publik di kvmhost dengan ssh-keygen
. Katakanlah pengguna iamAguest
Anda dan Anda telah menyimpan kunci publik baru/home/iamAguest/.ssh/id_rsa.pub
Anda kemudian akan menjalankan virt-sysprep
untuk menyuntikkan kunci-kunci itu ke dalam gambar:
virt-sysprep -a a_linux_image.qcow2 --run-command 'useradd iamAguest' --ssh-inject iamAguest:file:/home/iamAguest/.ssh/id_rsa.pub
Kemudian setelah Anda menggunakan instance menggunakan gambar itu a_linux_image.qcow2
, Anda kemudian harus ssh menggunakan kunci yang baru dibuat.
bagaimana amazon melakukan ini dengan mengklik tombol?
Script yang cukup sederhana bisa melakukan ini, tetapi pada platform skala AWS, tidak diragukan lagi akan sangat kompleks.
Jika Anda hanya menjalankan instance kvm milik Anda sendiri, sesuatu yang sederhana seperti ini dapat melakukan trik:
#!/usr/bin/bash
# get image and user from user input
image=$1
user=$2
# fail if no user input
if [ -z "$image" ] || [ -z "$user" ]; then
echo "you must enter a filepath to an image and a user name to run this"
echo "e.g: inject_ssh.bash <image> <user>"
exit 1
fi
# create ssh key for current logged in user with no passphrase
echo -e "/home/$user/.ssh/id_rsa\n\n" | ssh-keygen
# inject key into image
virt-sysprep -a $image --run-command "useradd $user" --ssh-inject $user:file:/home/$user/.ssh/id_rsa.pub
Namun perhatikan bahwa akan lebih baik untuk menyalin gambar terlebih dahulu, jadi Anda masih memiliki yang bersih tanpa kunci, jika Anda berencana menyediakan ini sebagai solusi konsumen. Ini juga merupakan ide yang bagus untuk menempatkan lebih banyak validasi dalam skrip; itu hanya contoh sederhana seperti apa adanya.