Pertanyaan Mengapa saya mendapatkan “Izin ditolak (publickey)” ketika mencoba SSH dari Ubuntu lokal ke server Amazon EC2?


Saya memiliki contoh aplikasi yang berjalan di cloud pada instance Amazon EC2, dan saya perlu menghubungkannya dari Ubuntu lokal saya. Ini berfungsi dengan baik pada salah satu ubuntu lokal dan juga laptop. Saya mendapat pesan "Izin ditolak (publickey)" ketika mencoba mengakses SSH ke EC2 pada Ubuntu lokal lainnya. Sangat aneh bagiku.

Saya sedang memikirkan beberapa masalah dengan pengaturan keamanan di Amazon EC2 yang memiliki akses IP terbatas ke satu contoh atau sertifikat mungkin perlu diperbarui.

Apakah ada yang tahu solusi?


213
2017-07-13 07:38




"Ini digunakan untuk bekerja sebelum" - sebelumnya apa? - womble♦
Saya memiliki contoh EC2 Elastic Beanstalk. Pada Agustus-2013 solusinya adalah untuk mengakses instance sebagai pengguna ec2-user yang membuat kesalahan Permission Denied (publicKey) hilang. Viz: ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. Tentu saja Anda harus semua barang-barang lainnya sesuai stackoverflow.com/questions/4742478/… - mikemay
Anda mendapatkan masalah ini jika Anda memiliki nama pengguna yang salah yang ditentukan. Dokumen aws (docs.aws.amazon.com/AWSEC2/latest/UserGuide/…) saat ini memberikan contoh dengan nama pengguna ec2-user [ssh -i / path/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com], sedangkan saya ( lama) kotak ubuntu memiliki nama pengguna ubuntu, jadi ketika saya menggunakan contoh saya menerima kesalahan ini, mengubah ke nama pengguna yang benar selesai. - david.barkhuizen
@ david.barkhuizen, komentar Anda membantu saya. Saya memiliki masalah serupa; ternyata itu ada hubungannya dengan username. Terima kasih. - NaijaProgrammer


Jawaban:


Hal pertama yang harus dilakukan dalam situasi ini adalah menggunakan -v opsi untuk ssh, sehingga Anda dapat melihat jenis otentikasi apa yang dicoba dan apa hasilnya. Apakah itu membantu mencerahkan situasi?

Dalam pembaruan Anda untuk pertanyaan Anda, Anda menyebutkan "pada Ubuntu lokal lain". Sudahkah Anda menyalin kunci privat ssh ke mesin lain?


140
2017-07-13 07:44



Saya telah menyalin kunci privat ssh ke mesin lain seperti yang disarankan @Greg. Ia bekerja sekarang. Terima kasih! - Vorleak Chy
Agar Anda dapat menggunakan flag -i untuk menunjuk ke jalur kunci tanpa menginstalnya - Jorge Vargas
Dalam kasus saya, saya menggunakan bitnami .ami dan tidak menyadari bahwa Anda harus masuk sebagai pengguna yang disebut bitnami, seperti: ssh -i <keyfile> bitname@<ec2-address>. Sayangnya -v pilihan tidak membantu saya menemukan ini, tetapi masih sangat berguna untuk memeriksanya! - Matt Connolly
baik, dalam kasus saya saya menggunakan nama pengguna yang salah. menggunakan "ubuntu" bukan "bitnami". seperti ini: ssh -i key.pem bitnami @ hostaddress - Lucas Pottersky
Pimpinan yang baik juga merupakan simpul jarak jauh itu sendiri, lihat ke dalamnya /var/log/auth.log, terkadang Anda akan melihat pesan-pesan berikut: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keys atau sesuatu yang lain - Jonas Libbrecht


Karena belum secara eksplisit disebutkan, sshd secara default sangat ketat pada izin untuk authorized_keys file. Jadi jika authorized_keys aku s dapat ditulis untuk siapa pun selain pengguna atau dapat dibuat bisa ditulis oleh siapa pun selain pengguna, itu akan menolak untuk mengotentikasi (kecuali sshd dikonfigurasi dengan StrictModes no)

Yang saya maksud dengan "dapat dibuat dapat ditulisi" adalah bahwa jika salah satu direktori induk dapat ditulis untuk siapa pun selain pengguna, pengguna yang diizinkan untuk memodifikasi direktori tersebut dapat mulai memodifikasi izin sedemikian rupa sehingga mereka dapat memodifikasi / mengganti authorized_keys.

Ini tidak akan muncul dengan ssh -v, itu akan muncul di log yang dipancarkan oleh sshd (biasanya dimasukkan ke dalam /var/log/secure atau /var/log/auth.log, tergantung pada distro dan syslogd konfigurasi).

Dari man sshd (8):

 ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described above.  The
         content of the file is not highly sensitive, but the recommended
         permissions are read/write for the user, and not accessible by
         others.

         If this file, the ~/.ssh directory, or the user's home directory
         are writable by other users, then the file could be modified or
         replaced by unauthorized users.  In this case, sshd will not
         allow it to be used unless the StrictModes option has been set to
         “no”.

73
2018-01-05 14:38



Bahwa "dapat dibuat dapat ditulis" sedikit itulah yang membuat saya - wmarbut
FWIW izin yang benar untuk file-file kunci adalah 600 (lihat sini) - Matt Lyons
Yap, file .authorized_keys saya dapat ditulisi oleh grup sehingga menolak untuk menerimanya. - Aditya M P
Saya memukul kepala saya di dinding! Folder pengguna saya memiliki izin yang salah. Terima kasih! - XJones
hal yang sama berlaku untuk folder ~ / .ssh itu sendiri. Anda mungkin mendapatkan pesan kesalahan berikut: Authentication refused: bad ownership or modes for directory - Yevgeniy M.


Saya menerima kesalahan ini, karena saya lupa menambahkan -l pilihan. Nama pengguna lokal saya tidak sama dengan di sistem jarak jauh.

Ini tidak menjawab pertanyaan Anda, tetapi saya tiba di sini mencari jawaban atas masalah saya.


37
2018-04-01 21:51



ssh host -l user sama dengan ssh user@hostbenar? - Znarkus
@Znarkus ya, itu sama. - cregox
Yup, ini memecahkan masalah saya yang menyebabkan kesalahan "Permalangan ditolak (publickey)" juga. - Brooks Moses
Ini adalah masalah bagiku. Saya mengharapkan pengguna "root" untuk bekerja, tapi saya menggunakan gambar Ubuntu EC2 yang memiliki pengguna default "ubuntu". - Cerin


Saya mendapat pesan ini pada contoh baru berdasarkan dari Ubuntu AMI. Saya menggunakan opsi -i untuk menyediakan PEM tetapi masih menunjukkan "Izin ditolak (publickey)".

Masalah saya adalah saya tidak menggunakan pengguna yang benar. Dengan menjalankan ssh dengan ubuntu @ ec2 ... itu bekerja seperti biasa.


19
2017-11-17 16:29



Ya ... saya menjalankan perintah dengan sudo, itulah mengapa itu tidak berhasil. - thaddeusmt


Sesuatu yang lebih mudah dibaca daripada ssh -i (menurut saya tentu saja), adalah tail -f /var/log/auth.log. Itu harus dijalankan di server yang Anda coba sambungkan, ketika mencoba untuk terhubung. Ini akan menampilkan kesalahan dalam teks biasa.

Ini membantu saya memecahkan masalah saya:

Pengguna [nama pengguna] dari xx.yy.com tidak diizinkan karena tidak ada grup pengguna yang tercantum di AllowGroups


16
2018-02-01 14:07



Saya pikir Anda berarti -v - Tim Tisdall
ini log server. untuk RHEL / CentOS 7: tail -f /var/log/secure - Gianfranco P.


Periksa Anda / etc / ssh / sshd_config mengajukan. Di sana, temukan garis yang mengatakan

PasswordAuthentication no

Kalimat itu perlu dimodifikasi untuk mengatakan ya, bukan tidak. Juga, restart server sshd sesudahnya.

sudo /etc/init.d/ssh restart

11
2017-12-10 06:15



Itu akan membuat server kurang aman. - Znarkus
Inilah masalah yang saya hadapi: Saya ingin membuat akun untuk pengguna lain, mengautentikasi hanya dengan kata sandi. Saya juga ingin dapat masuk sebagai diri saya sendiri dari tempat-tempat di mana saya tidak memiliki kunci pribadi saya. - Daniel
Bagaimana kita bisa pergi /etc/ssh/sshd_config - jika kita tidak bisa masuk ke server? - kyo
Untuk masuk ke server itu sendiri, Anda harus menggunakan file PEM yang mereka berikan saat Anda membuat instance. Instruksi pergi setelah itu. - Sudipta Chatterjee
Ini bekerja untuk saya, meskipun restart sshd membutuhkan perintah berikut: sudo service sshd reload - pacoverflow


Mungkin tidak relevan dengan poster saat ini, tetapi mungkin membantu orang lain yang menemukan ini ketika mencari jawaban untuk situasi serupa. Alih-alih membiarkan Amazon menghasilkan syp keypair, saya sarankan mengunggah kunci ssh publik standar, standar, Anda sendiri ke Amazon dan menetapkan bahwa ketika Anda menjalankan turunan EC2.

Ini memungkinkan Anda untuk menjatuhkan sintaks jenis "-i" dalam ssh, gunakan rsync dengan opsi standar, dan juga memungkinkan Anda menggunakan kunci ssh yang sama di semua wilayah EC2.

Saya menulis artikel tentang proses ini di sini:

Mengunggah Kunci ssh Pribadi ke Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys


6
2017-09-29 21:15



+1. Carilah pertanyaan ini dengan tepat untuk alasan ini. - John Riselvato
Saya melihat kesalahan ini dalam mengikuti artikel Anda. region = $ (ec2-describ-regions | cut -f2) Opsi yang diperlukan '-K, - kunci pribadi KEY' hilang (-h untuk penggunaan) - KashifAli
@KashifAli Anda akan ingin mengatur kredensial alat baris perintah EC2 API sehingga Anda tidak selalu harus menyampaikan kredensial pada setiap baris perintah. - Eric Hammond