PERINGATAN: FILE KUNCI PRIVATE YANG TIDAK DILINDUNGI! ketika mencoba SSH ke Amazon EC2 Instance

190

Saya sedang bekerja untuk mengatur Panda pada instance Amazon EC2. Saya mengatur akun dan alat saya tadi malam dan tidak punya masalah menggunakan SSH untuk berinteraksi dengan contoh pribadi saya, tetapi saat ini saya tidak diizinkan izin ke instance EC2 Panda. Memulai dengan Panda

Saya mendapatkan kesalahan berikut:

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

Permissions 0644 for '~/.ec2/id_rsa-gsg-keypair' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

Saya telah mengubah keypair saya menjadi 600 untuk masuk ke contoh pribadi saya tadi malam, dan bereksperimen panjang lebar menetapkan izin ke 0 dan bahkan menghasilkan string kunci baru, tetapi sepertinya tidak ada yang berhasil.

Bantuan apa pun akan sangat membantu!


Hm, seolah-olah kecuali izin ditetapkan ke 777 pada direktori, skrip EC2-run-instance tidak dapat menemukan file kunci saya. Saya baru mengenal SSH jadi saya mungkin mengabaikan sesuatu.

btw
sumber
EC2-run-instance seharusnya hanya memerlukan nama keypair, yang merupakan sesuatu yang hidup di pihak Amazon. Anda hanya harus menggunakan kunci pribadi Anda yang sebenarnya (yang ada di disk) ketika Anda SSH masuk. Kesalahan apa yang Anda dapatkan dari EC2-run-instance?
user27619
3
judul yang mengerikan untuk pertanyaan ini.
MikeNereson
2
@MikeNereson: silakan mengeditnya, begitulah cara kami memperbaiki keadaan di sini
Stu Thompson
Apakah Anda yakin Anda mengaturnya ke 0600 (oktal), dan bukan 600 (desimal)?
hyde
5
chmod 400 ~/.ssh/id_rsa Referensi: stackoverflow.com/a/9270753/2082569
atulkhatri

Jawaban:

210

Saya telah memodernisasi keypair ke 600 untuk masuk ke contoh pribadi saya tadi malam,

Dan memang begitulah seharusnya.

Dari dokumentasi EC2 kami memiliki "Jika Anda menggunakan OpenSSH (atau klien SSH yang cukup paranoid) maka Anda mungkin perlu mengatur izin file ini sehingga hanya dapat dibaca oleh Anda." Dokumentasi Panda yang Anda tautkan ke tautan ke dokumentasi Amazon tetapi benar-benar tidak menyampaikan betapa pentingnya semua itu.

Idenya adalah bahwa pasangan file kunci seperti kata sandi dan perlu dilindungi. Jadi, klien ssh yang Anda gunakan mengharuskan file-file itu diamankan dan hanya akun Anda yang dapat membacanya.

Mengatur direktori ke 700 benar-benar sudah cukup, tetapi 777 tidak akan sakit selama file tersebut 600.

Setiap masalah yang Anda hadapi adalah sisi klien, jadi pastikan untuk memasukkan informasi OS lokal dengan pertanyaan tindak lanjut!

Stu Thompson
sumber
3
Saya baru saja masuk ke situasi hari ini di mana saya INGIN keyfile agar dapat dibaca kelompok (menggunakan ssh bukan untuk login pribadi, tetapi untuk mengeksekusi skrip pada server jarak jauh, pengguna khusus pada server jarak jauh untuk tujuan ini, berwenang_kunci terkunci jadi hanya kata skrip akan berjalan, dan beberapa orang di server asal harus memiliki akses untuk menjalankan skrip). Oh well, saya kira solusi sederhana adalah dengan meletakkan salinan ke ~ / .ssh / untuk semua pengguna yang harus memiliki akses - atau mengisi otor_keys dengan semua kunci pribadi.
tobixen
@tobixen: Dua tahun mendatang, tapi ... solusi 'yang benar' adalah menempatkan kunci dalam pengguna yang berdedikasi, dan memungkinkan pengguna grup mengakses untuk menjalankan perintah itu sebagai pengguna khusus.
Stu Thompson
Tautan @StuThompson ke dokumentasi EC2 tampaknya sudah mati. Bisakah Anda memperbarui?
Aniket Thakur
Saya tidak bisa melihat apa yang harus saya lakukan untuk membuatnya bekerja dalam jawaban Anda, Tolong berikan jawaban :)
Pratik
Pengaturan @Pratik 600 untuk file kunci dan 777 untuk direktori seharusnya berfungsi.
Jamo
55

Pastikan direktori yang berisi file kunci pribadi diatur ke 700

chmod 700 ~/.ec2
Mark Biek
sumber
Adakah alasan khusus mengapa Anda ingin memiliki hak eksekusi pada file?
Zoltán
1
@ Zoltán itu adalah direktori, bukan file.
avmohan
Saya hanya menggunakan ini pada file .pem dan itu berhasil untuk saya.
CGTheLegend
30

Untuk memperbaikinya, 1) Anda harus mengatur ulang izin kembali ke default:

sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub

Jika Anda mendapatkan kesalahan lain: Anda yakin ingin melanjutkan koneksi (ya / tidak)? ya Gagal menambahkan host ke daftar host yang dikenal (/home/geek/.ssh/known_hosts).

2) Ini berarti bahwa izin pada file itu juga diatur secara tidak benar, dan dapat disesuaikan dengan ini:

sudo chmod 644 ~/.ssh/known_hosts

3) Akhirnya, Anda mungkin perlu menyesuaikan izin direktori juga:

sudo chmod 755 ~/.ssh

Ini akan membuat Anda kembali dan berjalan.

Alena
sumber
17

File kunci pribadi harus dilindungi. Dalam kasus saya, saya telah menggunakan otentikasi public_key untuk waktu yang lama dan saya digunakan untuk mengatur izin sebagai 600 (rw- --- ---) untuk kunci pribadi dan 644 (rw- r-- r--) dan untuk folder .ssh di folder home Anda akan memiliki 700 izin (rwx --- ---). Untuk pengaturan ini buka folder home pengguna dan jalankan perintah berikut


Tetapkan 700 izin untuk folder .ssh

chmod 700 .ssh


Tetapkan izin 600 untuk file kunci pribadi

chmod 600 .ssh/id_rsa


Tetapkan 644 izin untuk file kunci publik

chmod 644 .ssh/id_rsa.pub
Sandeep Sasikumar
sumber
2

Simpan kunci pribadi Anda, kunci publik, known_hosts di direktori yang sama dan coba masuk seperti di bawah ini:

ssh -I(small i) "hi.pem" ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
  • Direktori yang sama dalam arti cd /Users/prince/Desktop,. Sekarang ketik lsperintah dan Anda akan melihat **.pem **.ppk known_hosts

Catatan: Anda harus mencoba masuk dari direktori yang sama atau Anda akan mendapatkan izin ditolak kesalahan karena tidak dapat menemukan file .pem dari direktori Anda saat ini.


Jika Anda ingin dapat SSH dari direktori mana pun, Anda dapat menambahkan berikut ini ke ~/.ssh/configfile Anda ...

Host your.server
HostName ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ec2/id_rsa-gsg-keypair
IdentitiesOnly yes

Sekarang Anda dapat SSH ke server Anda di mana pun direktori berada dengan hanya mengetik ssh your.server(atau nama apa pun yang Anda tempatkan setelah "Host").

Pangeran Charu
sumber
1

Di windows, Coba gunakan git bash dan gunakan perintah Linux Anda di sana. Pendekatan yang mudah

chmod 400 *****.pem

ssh -i "******.pem" [email protected]
Dheeraj
sumber
Jika menggunakan WSL, pastikan Anda menyalin file pem ke folder Linux karena chmod tidak akan efektif di direktori / mnt.
Paulo Merson
1

Ubah Izin File menggunakan perintah chmod

sudo chmod 700 keyfile.pem
Greenkraftz
sumber
0

Saya sedang memikirkan hal lain, jika Anda mencoba masuk dengan nama pengguna lain yang tidak ada, inilah pesan yang akan Anda dapatkan.

Jadi saya berasumsi Anda mungkin mencoba ssh dengan pengguna ec2 tapi saya ingat baru-baru ini sebagian besar centos AMI misalnya menggunakan pengguna centos daripada pengguna ec2

jadi jika Anda ssh -i file.pem centos@public_IPtolong beri tahu saya bahwa Anda berniat untuk ssh dengan nama pengguna yang tepat jika tidak, ini mungkin menjadi alasan kuat Anda melihat pesan kesalahan seperti itu bahkan dengan izin yang tepat pada ~ / .ssh / id_rsa atau file.pem Anda

Abdel Hegazi
sumber
0

Hanya catatan untuk siapa saja yang menemukan ini:

Jika Anda mencoba SSH dengan kunci yang telah dibagikan dengan Anda, misalnya:

ssh -i /path/to/keyfile.pem user@some-host

Di mana keyfile.pemkunci privat / publik dibagikan dengan Anda dan Anda menggunakannya untuk menghubungkan, pastikan Anda menyimpannya di ~/.ssh/dan chmod 777.

Mencoba menggunakan file ketika disimpan di tempat lain di mesin saya memberikan kesalahan OP. Tidak yakin apakah itu terkait langsung.

Kubie
sumber
0

Solusinya adalah membuatnya hanya dapat dibaca oleh pemilik file, yaitu dua digit terakhir dari representasi mode oktal harus nol (misalnya mode 0400).

OpenSSH memeriksa ini authfile.c, dalam suatu fungsi bernama sshkey_perm_ok:

/*
 * if a key owned by the user is accessed, then we check the
 * permissions of the file. if the key owned by a different user,
 * then we don't care.
 */
if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("Permissions 0%3.3o for '%s' are too open.",
        (u_int)st.st_mode & 0777, filename);
    error("It is required that your private key files are NOT accessible by others.");
    error("This private key will be ignored.");
    return SSH_ERR_KEY_BAD_PERMISSIONS;
}

Lihat baris pertama setelah komentar: ia melakukan "bitwise dan" terhadap mode file, memilih semua bit dalam dua digit oktal terakhir (karena 07oktal untuk 0b111, di mana masing-masing bit singkatan dari r / w / x, masing-masing) .

Luc
sumber