Bagaimana cara menambahkan Kunci SSH ke file otor_keys?

185

Saya memiliki server Ubuntu di Amazon EC2, yang saya gunakan untuk pengembangan, dan hari ini saya dengan bodohnya membersihkan semuanya dari ~/.ssh/authorized_keysfile saya . Untungnya saya memiliki SSH terbuka, jadi saya masih terhubung, dan dapat memperbaiki file, tetapi ketika saya mencoba untuk mengembalikan file kunci saya, itu tidak berfungsi. Saya masih mendapat izin dari server di mesin lokal saya.

authorized_keysmemiliki izin 600. Saya telah mencoba menambahkan kunci SSH saya dengan ssh-rsa dan meninggalkan ssh-rsa. Saya juga mencoba membuat kunci SSH menjadi satu baris, tetapi itu tidak berhasil.

Apakah ada hal lain yang harus saya lakukan seperti memuat ulang file?

Dave Long
sumber
3
Bertahun-tahun kemudian, ini-masih- tampaknya relevan & aktif; hanya ingin melakukan pengamatan, berbicara tentang telah menghindari peluru: "Untungnya saya memiliki SSH terbuka, jadi saya masih terhubung [..]" - sheesh! ; dP
Nostromov
1
Posting ini, yang diedit pada hari ulang tahunku, menyelamatkanku dua bulan yang lalu pada hari ulang tahunku.
ytpillai

Jawaban:

198

Anda tidak boleh menyimpan file dengan isinya dimulai dengan -----BEGIN RSA PRIVATE KEY-----di server, itu adalah kunci pribadi Anda . Sebagai gantinya, Anda harus memasukkan kunci publik ke dalam ~/.ssh/authorized_keysfile.

Kunci publik ini memiliki .pubekstensi ketika dibuat menggunakan ssh-keygendan isinya dimulai dengan ssh-rsa AAAAB3. (Format biner dijelaskan dalam jawaban untuk pertanyaan ini ).

Izin ~/.sshpada server harus 700. File ~/.ssh/authorized_keys(di server) seharusnya memiliki mode 600. Izin kunci (pribadi) di sisi klien harus 600.

Jika kunci pribadi tidak dilindungi dengan kata sandi, dan Anda menaruhnya di server, saya sarankan Anda untuk membuat yang baru:

ssh-keygen -t rsa

Anda dapat melewati ini jika Anda sepenuhnya yakin bahwa tidak ada yang dapat memulihkan kunci pribadi yang dihapus dari server.

Jika ini tidak membantu, jalankan sshdengan opsi untuk lebih banyak kata:

ssh -vvv [email protected]

Di sisi server, Anda dapat meninjau /var/log/auth.logdetailnya.

Lekensteyn
sumber
1
Dengan server Amazon EC2 yang saya dapatkan adalah kunci pribadi (key.pem). Saya tidak memiliki kunci publik di mana pun.
Dave Long
3
@Dave Long: Anda harus membuat kunci baru menggunakan ssh-keygen -t rsadan memasukkan file yang baru dibuat id_rsa.pubdi ~/.ssh/authorized_keysserver Anda. Lihat juga docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn
15
@DaveLong: Anda dapat membuat kunci publik dari kunci pribadi kapan saja. Anda dapat melakukan ini hanya dengan perintah berikut: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne
5
@MorganBlackthorne Sementara itu benar, saya akan merekomendasikan membuat kunci pribadi Anda daripada menerima satu dari sumber jarak jauh. Anda tidak dapat sepenuhnya yakin bahwa kunci pribadi tidak bocor.
Lekensteyn
2
@Gerrat Fixed².
Lekensteyn
175

Cara alternatif untuk menginstal kunci publik Anda di mesin jarak jauh authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Beberapa keuntungan:

  • tidak perlu ssh-copy-iddiinstal.

  • jaminan bahwa mkdirbekerja sebelum mencoba untuk menambahkan id_rsa.pubke authorized_keys.

Marius Butuc
sumber
10
Jawaban Anda membantu saya melakukan ini pada banyak mesin jarak jauh tanpa paket tambahan, terima kasih.
nol
Ini tidak menjamin bahwa direktori "~ / .ssh" dan file "~ / .ssh / official_keys" akan dibuat dengan izin yang benar.
Nick
1
@Nick, saya punya masalah itu. Jadi mungkin seseorang harus benar-benar memeriksa keberadaannya, jika tidak ada, buat dengan chmod (700 / folder, 600 / file), dan baru kemudian tambahkan? jadi mungkin itu bukan kapal satu liner?
AnneTheAgile
7
@AnneTheAgile Saya pikir mengubah mkdir -p ~/.sshbagian dari jawaban yang diberikan oleh @MariusButuc umask 077 && mkdir -p ~/.sshadalah semua yang perlu Anda lakukan untuk memastikan bahwa itu akan berfungsi dengan baik.
Nick
1
ty @Nick! Aku akan mencobanya.
AnneTheAgile
128

Jika Anda memiliki otentikasi berbasis login maka gunakan ssh-copy-iduntuk menambahkan kunci publik Anda ke server jauh.

ssh-copy-id user@host
Shoaib Nawaz
sumber
1
Tampaknya itu bukan perintah yang valid pada Mac, yang merupakan mesin klien saya.
Dave Long
13
pada OSX Anda dapat menginstal dengan minuman:brew install ssh-copy-id
phil
Di Macports, perintah ini dapat diinstal menggunakan sudo port install openssh +ssh_copy_id. The +ssh_copy_idmenginstal openssh dengan varian ssh_copy_id.
Stefan Lasiewski
6
Perhatikan bahwa petunjuk di phildawson.tumblr.com meminta Anda untuk menginstal perangkat lunak yang tidak terpercaya, sebagai root. Ini cukup berbahaya dan cara yang bagus untuk diretas, kecuali Anda tahu Anda bisa mempercayai penulisnya.
Stefan Lasiewski
38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit
jjg
sumber
16

Cara termudah adalah menyalin dan menempel ...

Pertama lihat / salin konten kunci publik lokal Anda id_rsa.pubtermasuk awal "ssh-rsa" sampai berakhir dengan alamat email Anda:

cat ~/.ssh/id_rsa.pub

Kemudian edit authorized_keysdi server dan rekatkan isi clipboard Anda di bawah tombol lain apa pun di file itu:

nano ~/.ssh/authorized_keys

Dan simpan Ctl+O, keluar dari file Ctl+X, keluar dari sesi SSH exitdan coba masuk kembali untuk mengonfirmasi itu berhasil. Jika tidak meminta kata sandi, itu berhasil.

ow3n
sumber
5

Saya pikir saya dapat berkontribusi untuk ini karena ini adalah contoh AWS khusus dan semua jawaban hanya memperlakukan masalah sebagai masalah Linux, seolah-olah itu adalah perangkat keras. Hal pertama yang perlu Anda pahami adalah bahwa Anda seharusnya tidak pernah memperlakukan EC2 sebagai perangkat keras. Itu hanya akan membuat lebih banyak pekerjaan untuk Anda Perlakukan mereka sebagai volatile. Itulah rintangan terbesar yang saya lihat di antara orang-orang dengan AWS. Buat AMI dari instance Anda dan masukkan kunci yang Anda butuhkan ke instance baru. cloud-init akan membereskannya untuk Anda. Secara lebih rinci yang harus Anda lakukan adalah menggunakan kunci publik yang benar ketika membuat instance baru dari AMI yang asli. Jika, seperti dalam komentar dari jawaban yang disetujui, Anda ingin membuat pasangan kunci Anda sendiri dari file pub dan pemulung AWS memberi Anda opsi untuk mengunggah kunci publik Anda untuk digunakan dalam EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

Einarc
sumber
3

Setelah menyimpan kunci publik, Anda harus menyimpan kunci pribadi ke dalam direktori dan file di pc Anda. Dan di bagian auth dari ssh pada dempul Anda harus menunjuk ke file kunci pribadi yang Anda simpan di desktop Anda. Itu akan berhasil. Ini bekerja untuk saya.

pengguna273266
sumber
1
Saya akan sangat senang jika konsol windows dapat menambahkan semua fungsi ssh ke dalam interpreternya
Dennis
2

Dapatkan shell pada mesin jarak jauh di mana Anda ingin meletakkan kunci dan kemudian Anda dapat menjalankan satu-liner ini untuk membuat file dan direktori yang diperlukan, mengatur izin mereka dan menambahkan kunci ke file. Tentu saja Anda harus mengubah KEYGOESHEREbagian di bawah ini dan komentar setelahnya.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys
Sarel Botha
sumber
1

Berikut adalah variasi di mana Anda mungkin memiliki daftar nama file kunci publik dalam file teks dan kumpulan besar file kunci publik juga di direktori yang sama.

Variasi ini dapat membantu jika Anda memberikan daftar besar file kunci publik untuk diimpor :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
jlmontes
sumber