Misalnya AWS memungkinkan saya untuk ssh dengan kunci pribadi pertama kali tanpa kata sandi

-1

Ini bukan tentang menyalin kunci publik di server dan kemudian ssh-ing, jika Anda akan menyarankan itu.

Jadi saya membuat instance AWS Linux, dan saya membuat pasangan kunci ssh, dan secara otomatis mengunduh kunci pribadi.

Sekarang saya dapat terhubung ke instance AWS Linux saya hanya dengan:

ssh -i key_they_gave_me ec2-user@AWSinstanceIP

Bagaimana cara mengatur hal semacam ini untuk Linux vms saya sendiri? Jadi seseorang bisa ssh ke dalamnya dengan kunci pribadi, tanpa perlu kata sandi?

EDIT: Saya tidak berbicara tentang menyalin id_rsa.pub. Saya tahu bagaimana melakukan itu, dan contoh AWS tidak mengharuskan itu. Itu yang saya mau.

iamAguest
sumber

Jawaban:

3

Frasa sandi kosong diizinkan dengan SSH. Anda dapat mereplikasi dengan ssh-keygenhanya menekan enter ketika diminta untuk frasa sandi. Dari man ssh-keygen:

Program ini juga meminta frasa sandi. Frasa sandi mungkin kosong untuk menunjukkan tidak ada frasa sandi (kunci host harus memiliki frasa sandi kosong), atau mungkin string yang panjangnya sewenang-wenang.

Ini adalah perilaku standar untuk kunci yang dihasilkan sebagai bagian dari berbagai layanan cloud. Saya berharap Anda akan menemukan hal yang sama terjadi jika Anda menggunakan Google atau Microsoft cloud. Ini mungkin tampak tidak aman tetapi alternatifnya juga tidak bagus. Entah bagaimana mereka perlu memberi Anda akses ke VM.

Bagi siapa pun yang khawatir tentang keamanan, ssh-keygenjuga memiliki fungsi untuk mengubah frasa sandi pada kunci pribadi tanpa perlu mengubah kunci publik:

ssh-keygen -p -f key_they_gave_me

Secara pribadi saya memiliki frasa sandi aktif secara default, tetapi menyimpan kunci frasa sandi di dalam volume LUKS. Ketika saya tahu saya akan banyak melakukan sshing, saya memasang kunci passphraseless di atas kunci default. Ketika saya selesai bekerja, saya meng-unmount sehingga pengganggu masih harus berurusan dengan frasa sandi. Ini meniadakan perlunya ssh-agent banyak waktu sambil memberikan banyak kontrol atas seberapa aman kunci tersebut.

cryptarch
sumber
0

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 KVMplatform virtualisasi buatan sendiri daripada XENseperti 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-syspreppada qcow2gambar dengan --ssh-injectbendera.

Contoh

pertama buat kunci publik di kvmhost dengan ssh-keygen. Katakanlah pengguna iamAguestAnda dan Anda telah menyimpan kunci publik baru/home/iamAguest/.ssh/id_rsa.pub

Anda kemudian akan menjalankan virt-sysprepuntuk 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.

RobotJohnny
sumber
1
Dengan kata lain, itu bukan sesuatu yang intrinsik bagi ssh, terima kasih. Anda memberikan satu-satunya jawaban yang benar-benar relevan, pujian!
iamAguest
0

Saya benar-benar menemukan cara untuk melakukannya. Sebenarnya sangat sederhana.

Katakanlah Anda memiliki machine1 dan machine2, dan Anda ingin dapat mengakses machine2 dari machine1 tanpa menangani kunci machine1, melalui metode yang akan memungkinkan pengguna machine1 mengakses machine2 bahkan dari komputer lain selain machine1.

Anda melakukan ssh-keygenpada mesin2. Anda lakukan cat /path/.ssh/id_rsa.pub >> /path/.ssh/authorized_keys, lalu chmod 600 /path/.ssh/authorized_keys, lalu akhirnya Anda salin id_rsasebagai file permit.pem dan berikan ke machine1.

Machine1 cara ini dapat terhubung ke machine2 lakukan ssh -i permission.pem thatuser@machine2. Pengguna machine1 dapat mengambil permit.pem dengannya dan terhubung ke machine2 tanpa kata sandi dari mesin apa pun.

Tentu saja ini tidak aman, tetapi Anda juga bisa menggunakan kata sandi. Apa yang ingin saya ketahui adalah sebagai KONSEP bagaimana melakukannya. Ini yang menjawabnya.

iamAguest
sumber