Izin ditolak (publickey) ketika SSH Access ke Amazon EC2 misalnya [ditutup]


355

Saya ingin menggunakan contoh Amazon ec2 saya tetapi menghadapi kesalahan berikut:

Permission denied (publickey).

Saya telah membuat pasangan kunci dan mengunduh file .pem .

Diberikan:

chmod  600 pem file.

Lalu, perintah ini

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

Tetapi ada kesalahan ini:

Permission denied (publickey)

Juga, bagaimana saya bisa terhubung dengan filezilla untuk mengunggah / mengunduh file?


1
berkenaan dengan pertanyaan kedua Anda, terhubung dengan filezilla untuk mengunggah / mengunduh file, periksa ini untuk petunjuk langkah demi langkah - y2u.be/e9BDvg42-JI
Yasitha Chinthaka

2
Anda yakin tidak menggunakan "sudo chmod 600 pem file" ini akan menyebabkan kesalahan ini dan berarti Anda harus menggunakan sudo sebelum ssh
felbus

Juga untuk beberapa OS Debian, nama pengguna adalah admin. Setidaknya untuk versi 6.5 dan 7.0.
Pengembang

2
Jika nama pengguna Anda ec2-user, pastikan Anda tidak menggunakan ec2_user:)
grisaitis

2
Pastikan pengguna yang Anda coba sambungkan memiliki kunci yang tercantum dalam file- nya $HOME/.ssh/authorized_keys .
ILMostro_7

Jawaban:


589

Pesan kesalahan ini berarti Anda gagal mengautentikasi.

Ini adalah alasan umum yang dapat menyebabkan itu:

  1. Mencoba terhubung dengan kunci yang salah. Apakah Anda yakin instance ini menggunakan keypair ini?
  2. Mencoba terhubung dengan nama pengguna yang salah. ubuntuadalah nama untuk distribusi AWS ubuntu berdasarkan, tetapi pada beberapa orang lain itu ec2-user(atau adminpada beberapa Debians, menurut jawaban Bogdan Kulbida ini) (juga bisa root, fedora, lihat di bawah)
  3. Mencoba menghubungkan host yang salah. Apakah itu host yang tepat yang Anda coba masuki?

Catatan itu 1.juga akan terjadi jika Anda mengacaukan /home/<username>/.ssh/authorized_keysfile pada instance EC2 Anda.

Tentang 2., informasi tentang nama pengguna yang harus Anda gunakan sering kurang dari deskripsi Gambar AMI. Tetapi Anda dapat menemukan beberapa di dokumentasi AWS EC2, poin 4.: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Gunakan perintah ssh untuk terhubung ke instance. Anda akan menentukan file kunci pribadi (.pem) dan user_name @ public_dns_name. Untuk Amazon Linux, nama pengguna adalah ec2-user. Untuk RHEL5, nama pengguna adalah pengguna root atau ec2 . Untuk Ubuntu, nama pengguna adalah ubuntu . Untuk Fedora, nama pengguna adalah fedora atau pengguna ec2 . Untuk SUSE Linux, nama pengguna adalah root . Jika tidak, jika pengguna dan root ec2 tidak berfungsi, tanyakan kepada penyedia AMI Anda.

Akhirnya , ketahuilah bahwa ada banyak alasan lain mengapa otentikasi akan gagal. SSH biasanya cukup eksplisit tentang apa yang salah jika Anda ingin menambahkan -vopsi ke perintah SSH Anda dan membaca hasilnya, seperti yang dijelaskan dalam banyak jawaban lain untuk pertanyaan ini.


2
Saya tidak berpikir antarmuka menawarkan Anda untuk menambahkan kunci ke instance yang sedang berjalan sehingga Anda harus memulai yang baru jika Anda kehilangan kunci untuk instance yang sedang Anda jalankan.
Thibault D.

81
# 2 memperbaiki masalah saya, terima kasih!
rckehoe

4
Jawaban ini menyelesaikannya untuk saya. Nama pengguna default untuk instance ini adalah "ubuntu", bukan ec2-user seperti yang dikatakan dalam manual AWS. Coba gunakan'ec2-user@_your_EC2_IP.amazonaws.com
emf

7
Mengenai # 1, kunci salah, menambahkan -v (verbose) ke baris perintah ssh menunjukkan kepada saya kunci mana yang sedang dicoba dan yang membuat saya sadar bahwa itu tidak mencoba kunci yang saya buat karena saya telah menamainya dengan sesuatu selain id_rsa atau id_dsa.
KC Baltz

3
"ubuntu adalah nama pengguna untuk distribusi AWS berbasis ubuntu," Inilah yang membuat saya. Digunakan untuk pengguna ec2, hanya diasumsikan bahwa itu selalu nama pengguna.
Nate Reed

48

Dalam hal ini masalahnya muncul dari Pasangan Kunci yang hilang. Tentang ini:

  • Tidak ada cara untuk mengubah Pasangan Kunci pada contoh . Anda harus membuat contoh baru yang menggunakan Pasangan Kunci baru.
  • Anda dapat mengatasi masalah jika instance Anda digunakan oleh aplikasi di Elastic Beanstalk .

Anda dapat mengikuti langkah-langkah ini:

  1. Akses ke Konsol Manajemen AWS
  2. Buka Tab Pohon Kacang Elastis
  3. Pilih aplikasi Anda dari Semua Aplikasi Tab
  4. Dari menu sebelah kiriù pilih Konfigurasi
  5. Klik pada Contoh Aksesoris
  6. Di Server Form, periksa input Pair Key EC2 dan pilih Pair Key baru Anda. Anda mungkin harus menyegarkan daftar untuk melihat Pasangan Kunci baru yang baru saja Anda buat.
  7. Menyimpan
  8. Elastic Beanstalk akan membuatkan untuk Anda instance baru yang terkait dengan pasangan kunci baru.

Secara umum, ingat Anda harus mengizinkan instance EC2 Anda untuk menerima lalu lintas SSH masuk.

Untuk melakukan ini, Anda harus membuat aturan khusus untuk Grup Keamanan instance EC2 Anda. Anda dapat mengikuti langkah-langkah ini.

  1. Akses ke Konsol Manajemen AWS
  2. Buka Tab EC2
  3. Dari Instances daftar pilih instance yang Anda minati
  4. Di tab Deskripsi, centang nama Grup Keamanan oleh instance Anda.
  5. Lagi di tab Keterangan klik pada aturan Lihat dan periksa apakah Grup Keamanan Anda memiliki aturan untuk lalu lintas ssh masuk pada port 22
  6. Jika tidak, dalam Menu Jaringan & Keamanan pilih Security Group
  7. Pilih Grup Keamanan yang digunakan oleh instance Anda dan klik Tab Masuk
  8. Di sebelah kiri Tab Masuk Anda dapat membuat aturan untuk lalu lintas masuk SSH:
    • Buat aturan baru : SSH
    • Sumber : Alamat IP atau subnetwork dari mana Anda ingin akses ke instance
    • Catatan : Jika Anda ingin memberikan akses tanpa batas ke instance Anda, Anda dapat menentukan 0.0.0.0/0 , meskipun Amazon tidak merekomendasikan praktik ini
  9. Klik Tambahkan Aturan lalu Terapkan Perubahan Anda
  10. Periksa apakah Anda sekarang dapat terhubung ke instance Anda melalui SSH.

Semoga ini bisa membantu seseorang seperti membantu saya.


1
Bagian kedua dari jawaban Anda salah. Anda tidak bisa mendapatkan "Izin ditolak (publickey)." jika Anda belum menetapkan pengaturan firewall (Grup Keamanan) dengan benar. "Izin ditolak (publickey)." adalah pesan kesalahan dari SSH dan merupakan bukti bahwa konfigurasi Grup Keamanan Anda benar. Sebagai gantinya, Anda akan mendapatkan "ssh: terhubung ke host xxxx port 22: Sambungan ditolak"
Thibault D.

Singkat cerita: Pesan kesalahan memberitahu bahwa masalah ini tidak ada hubungannya dengan konfigurasi Grup Keamanan Anda.
Thibault D.

Kamu benar. Bagian kedua menangani masalah jenis lain. Saya memperbaiki pos.
Matteo Ceserani

Jika Anda kehilangan kunci, saya pikir cara yang mungkin untuk menyelesaikannya adalah dengan mengambil snapshot dari instance dan kemudian mulai yang baru dengan kunci baru. Jika demikian, Amazon menambahkan kunci publik baru di .ssh / berwenang_kunci jadi pastikan untuk menghapus yang lama sesudahnya. (dan berhati-hatilah untuk tidak menghapus yang baru atau Anda kembali ke masalah pertama Anda)
Thibault D.

43

Inilah cara saya memecahkan masalah

ssh -i <key> ec2-user@<ec2 ip>

1
Tampaknya kunci bagi saya di sini adalah alamat DNS dari host vs IP. ec2-user @ <ip> bekerja untuk saya.
Zack

1
Solusi juga.
Tpojka

26

Aku memecahkan masalah hanya menempatkan sudosebelum

sudo ssh -i mykey.pem myec2.amazonaws.com

Tetapi solusi yang tepat adalah mengubah kepemilikan terlebih dahulu, dan kemudian terhubung sebagai pengguna normal seperti yang dikatakan Janus Troelsen di bawah ini. Dalam kasus saya itu adalah:

chown wellington:wellington key.pem

Bekerja untuk saya (harus memperbarui beberapa paket setelahnya)!
user1429980

4
solusi yang tepat adalah mengubah kepemilikan terlebih dahulu, dan kemudian terhubung sebagai pengguna normal. gunakan sudo chown wellington:wellington key.pem.
Janus Troelsen

itu berfungsi, dalam kasus Anda karena Anda mencoba masuk VM di Amazon yang mendukung pengguna root
Taimoor Changaiz

Saya telah melakukan whoami lalu sudo chown user_name_given_by_whoami xxxx.pem
Chirag Purohit

23

Coba gunakan

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>

ATAU

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>

1
Ini membantu saya. Terima kasih atas tipnya! : D
jehzlau

22

Kemungkinan penyebab lain dari kesalahan ini:

Ketika direktori home pengguna dapat ditulis kelompok , pengguna tidak dapat login.

(Direproduksi pada instance Ubuntu.)


1
+1 Berharap saya telah membaca ini 4 jam yang lalu !!! Memecahkan masalah saya di mana rsync -a menimpa izin folder pengguna ec2 saya.
Michael Hobbs

Setelah saya mencari direktori home saya, saya tidak bisa login.
Robert Moon

Jadi bagaimana Anda masuk pada mesin yang terpengaruh, dan Anda tidak bisa masuk sama sekali?
PKHunter

Perbaiki izin pada direktori home / bekerja untuk saya juga, terima kasih! @AlexPetralia, tautan Anda rusak = / tetapi ada pos di forum aws yang membicarakan hal ini: forums.aws.amazon.com/message.jspa?messageID=334402
Liko

Dapatkah seseorang seperti Alex Petralia atau @Michael Hobbs memposting ulang (atau menyatakan kembali) solusi untuk ini?
Jakub Langr

7

untuk contoh mikro ubuntu 12,04 lts saya harus menetapkan nama pengguna sebagai opsi

ssh -i pemfile.pem -l ubuntu dns

ini bekerja untuk saya, saya terkejut itu bukan bagian dari dokumentasi aws untuk benar-benar membahas pengguna yang mungkin diperlukan.
Ben

7

Anda perlu melakukan langkah-langkah berikut:

  1. Buka klien atau terminal ssh Anda jika Anda menggunakan Linux.
  2. Temukan file kunci pribadi Anda dan ubah direktori Anda.
    cd <path to your .pem file>
  3. Jalankan perintah di bawah ini:
    chmod 400 <filename>.pem
    ssh -i <filename>.pem ubuntu@<ipaddress.com>

Jika ubuntupengguna tidak berfungsi maka coba dengan ec2-user.


5

Saya kesulitan dengan izin yang sama karena kesalahan ternyata

key_parse_private2: missing begin marker 

Dalam situasi saya penyebabnya adalah file konfigurasi ssh dari pengguna saat ini (~ / .ssh / config).

Menggunakan yang berikut ini:

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'

Output awal menunjukkan:

debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config

... banyak garis debug memotong di sini ...

debug1: Next authentication method: publickey
debug1: Trying private key: /home/ec2-user/somekey.pem
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.

Baris ketiga di atas adalah tempat masalah aktual diidentifikasi; Namun, saya mencari pesan debug empat baris dari bawah (atas) dan disesatkan. Tidak ada masalah dengan kunci tetapi saya mengujinya dan membandingkan konfigurasi lainnya.

File konfigurasi ssh pengguna saya mengatur ulang host melalui pengaturan global yang tidak diinginkan seperti yang ditunjukkan di bawah ini. Baris Host pertama seharusnya bukan komentar.

$ cat config
StrictHostKeyChecking=no
#Host myAlias
        user ec2-user
        Hostname bitbucket.org
#        IdentityFile ~/.ssh/somekey
#        IdentitiesOnly yes

Host my2ndAlias
        user myOtherUser
        Hostname bitbucket.org
        IdentityFile ~/.ssh/my2ndKey
        IdentitiesOnly yes

Saya harap orang lain menemukan ini bermanfaat.


4

Saya lupa menambahkan nama pengguna (ubuntu) saat menghubungkan contoh Ubuntu saya. Jadi saya mencoba ini:

ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com

dan cara yang benar adalah

ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com

Kesalahan pemula yang sah. Jika Anda lupa menambahkan nama pengguna, maka itu akan menggunakan nama pengguna yang Anda masuk dengan komputer lokal Anda.
Thibault D.

3

Ini terjadi pada saya beberapa kali. Saya telah menggunakan Amazon Linux AMI 2013.09.2 dan Ubuntu Server 12.04.3 LTS yang keduanya berada pada tingkat gratis.

Setiap kali saya meluncurkan contoh saya memiliki izin ditolak muncul. Saya belum memverifikasi ini tetapi teori saya adalah bahwa server tidak sepenuhnya diatur sebelum saya mencoba ssh ke dalamnya. Setelah beberapa kali mencoba dengan izin yang ditolak, saya menunggu beberapa menit dan kemudian saya dapat terhubung. Jika Anda mengalami masalah ini, saya sarankan menunggu lima menit dan mencoba lagi.


Saya menunggu 5 menit. dan itu berhasil. Saya juga di tingkat gratis. terima kasih
Emeka Mbah

2

Berikut adalah skenario frustasi yang mungkin menghasilkan kesalahan ini:

Jika Anda menyantap instance baru dari AMI yang Anda buat dari instance lain (misalkan instance xyz), maka instance baru hanya akan menerima kunci yang sama dengan instance A yang digunakan. Ini benar-benar dapat dimengerti tetapi menjadi membingungkan karena selama proses langkah demi langkah membuat instance baru, Anda diminta untuk memilih atau membuat kunci (pada langkah terakhir) yang tidak akan berfungsi.

Terlepas dari kunci yang Anda buat atau pilih, hanya kunci yang Anda gunakan misalnya XYZ akan diterima oleh instance baru.


Wow, saya tidak pernah memikirkan hal ini. Menggunakan kunci lama memecahkan masalah bagi saya. Terima kasih.
tolgamorf

Biasanya menambahkan kunci publik baru ke file Authorized_key, sehingga membuat keduanya dapat digunakan. Sudah lama sejak saya diuji, tapi itulah yang saya harapkan akan terjadi.
Thibault D.

2

Saya berjuang dengan ini untuk sementara waktu sampai saya menemukan yang berikut:

eb ssh

Ketika Anda menggunakannya dari direktori proyek, bingo-bango no muss no ribut-ribut, Anda masuk


2

Dalam kasus saya sendiri, saya melakukan hal berikut:

chmod 400 <key.pem>

ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)

Saya awalnya menggunakan root@bagian dan saya mendapat prompt ini:

Please login as the user "ec2-user" rather than the user "root".

2

Saya di Windows dengan WinSCP . Ini bekerja sangat baik pada File Explorer dan Putty SSH Shell untuk mengakses Amazon EC2-VPC Linux saya. Tidak ada hubungannya dengan chmod pem filepenggunaan myfile.ppk dikonversi oleh PuTTYgen dari file pem .


2

hal yang sama terjadi pada saya, tetapi semua yang terjadi adalah bahwa kunci pribadi hilang dari gantungan kunci di mesin lokal saya.

ssh-add -K

menambahkan kembali kunci, maka perintah ssh untuk menghubungkan kembali berfungsi.


Itu terjadi setiap saat setelah restart dan saya harus menjalankan kembali perintah di atas solusi untuk ini.
silentsudo

1
belum diverifikasi ini sendiri, tapi jawaban diverifikasi sini mungkin membantu: apple.stackexchange.com/questions/254468/...
Eitan Lavi

1

Masalah ini dapat diselesaikan dengan masuk ke kotak Ubuntu menggunakan perintah di bawah ini:

ssh -i ec2key.pem ubuntu@ec2-public-IP

1
Tolong Berikan beberapa detail.
Syeda Zunaira

1

Saya sudah dua kali memiliki kunci dan ssh baris perintah yang benar (saya tahu karena saya menduplikasi contoh Ubuntu 14.04 yang berfungsi), tetapi tidak dapat ssh menjadi contoh baru, bahkan setelah menunggu 5 menit seperti yang disarankan oleh Wade Anderson di atas.

Saya harus menghancurkan dan menciptakan kembali mesin. Ini telah terjadi pada dua kesempatan terpisah. Karena saya tidak bisa masuk pada awalnya, saya tidak bisa melihat apa yang salah.

Jadi, jika Anda memiliki masalah ini, coba itu.


1

Anda harus memeriksa beberapa hal ini:

  1. Pastikan alamat IP Anda benar
  2. Pastikan Anda menggunakan Kunci yang benar
  3. Pastikan Anda menggunakan nama pengguna yang benar, Anda dapat mencoba: 3.1. admin 3.2. ec2-user 3.3. ubuntu

Saya memiliki masalah yang sama, dan diselesaikan setelah saya mengubah nama pengguna menjadi ubuntu. Dalam dokumentasi AWS disebutkan untuk pengguna ec2-user tetapi entah bagaimana tidak bekerja untuk saya.


1

Kunci pribadi saya disetel untuk izin 400dan mengakibatkan Izin ditolak menetapkannya ke '644' membantu saya.

key_load_private_type: Izin ditolak adalah kesalahan spesifik yang saya dapatkan

Larutan: Sudo chmod 644 <key.pem>

Catatan: diatur ke 644 harus, itu tidak berfungsi dengan 400


1

Ketika Anda mencoba melakukannya

ssh -i <.pem path> root@ec2-public-dns

Anda mendapatkan pesan yang menyarankan Anda untuk menggunakan ec2-user.

Please login as the user "ec2-user" rather than the user "root".

Jadi gunakan

ssh -i <.pem path> ec2-user@ec2-public-dns


1

Saya memiliki masalah yang sama dan sangat aneh. Jika Anda yakin Anda melakukan semua yang baik daripada mengikuti ini: Terkadang ada kebingungan tentang pengguna untuk instance EC2 !! Beberapa kali Anda mendapatkan pengguna ec2, ubuntu, centos dll. Jadi periksalah username Anda untuk machie !!

Login dengan pengguna root. ssh -i yourkey.pem (400 permission) root@<ip> Ini akan menimbulkan kesalahan dan akan memberi Anda nama pengguna yang tersedia . kemudian login dengan pengguna itu.


1

Ini hal mendasar, tetapi selalu pastikan pengguna mana yang Anda coba lakukan login. Saya kasus saya hanya gangguan . Saya mencoba menggunakan pengguna root :

ssh -i ~/keys/<key_name> root@111.111.111.111

Tetapi ada pengguna lain :

ssh -i ~/keys/<key_name> dedeco@111.111.111.111

1

saya memiliki kesalahan yang sama tetapi situasi yang berbeda. bagi saya itu terjadi tiba-tiba setelah banyak waktu saya bisa ssh berhasil ke komputer remote saya di luar sana. setelah banyak mencari solusi untuk masalah saya adalah izin file. itu aneh tentu saja karena saya tidak mengubah izin di komputer saya atau yang jauh milik file / direktori ssh. jadi dari wiki archlinux yang baik ini dia:

Untuk mesin lokal lakukan ini:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

Untuk mesin jarak jauh lakukan itu:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

setelah itu ssh saya mulai bekerja lagi tanpa izin ditolak (publickey).


0

Kemungkinan Kemungkinan Lain: ID login salah

Periksa 'Petunjuk Penggunaan'

Semua saran bagus di atas, tetapi yang saya temui adalah saya memilih contoh yang sudah dibuat sebelumnya. Setelah instance dimulai, lihat petunjuk penggunaan. Saya salah menggunakan id login kunci pribadi ketika dalam instruksi saya seharusnya menggunakan 'bitnami' (misalnya bitnami @ domain -i key.pem)


0

Saya memiliki kesalahan serupa

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: xxxx.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

Masalah saya adalah bahwa instance tidak mulai dengan benar karena kesalahan pada skrip run-on-start-up dari Step 3: Configure instance detail bawahAdvanced details:

Apa yang saya pikir saya masukkan:

#include
 https://xxxx/bootstrap.sh


Apa yang sebenarnya dimasukkan merusak pengaturan instance

#include

https://xxxx/bootstrap.sh

Jadi kunci publik di sisi contoh tidak dibuat


0

Ini sensitif huruf.

Salah: Pengguna SSH EC2 @ XXX.XX.XX.XX -i MyEC2KeyPair.pem

Benar: SSH ec2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem


-1

Saya bisa SSH dari satu mesin, tetapi tidak dari yang lain. Ternyata saya menggunakan kunci pribadi yang salah.

Cara saya menemukan ini adalah dengan mengambil kunci publik dari kunci pribadi saya, seperti ini:

ssh-keygen -y -f ./myprivatekey.pem

Apa yang keluar tidak cocok dengan apa yang ada di ~/.ssh/authorized_keysinstance EC2.


-1

Semua jawaban berperingkat teratas di atas akurat dan harus berfungsi untuk sebagian besar kasus. Jika mereka tidak seperti dalam kasus saya, saya cukup menyingkirkan ~/.ssh/known_hostsfile saya pada mesin yang saya coba ssh dari dan yang memecahkan masalah bagi saya. Saya dapat terhubung setelah itu.


Meskipun menghapus known_hostsdapat memecahkan masalah saat menyambungkan ke server yang telah mengubah kunci hostnya (meskipun ini pendekatan yang buruk), saya cukup yakin itu tidak dapat menyelesaikan kesalahan "Izin ditolak (publickey)" .
Martin Prikryl
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.