Mencoba SSH menjadi instance Amazon Ec2 - kesalahan izin


745

Ini mungkin pertanyaan sederhana yang bodoh bagi sebagian orang :)

Saya telah membuat contoh linux baru di Amazon EC2, dan sebagai bagian dari itu mengunduh file .pem untuk memungkinkan saya masuk SSH.

Ketika saya mencoba ssh dengan:

ssh -i myfile.pem <public dns>

Saya mendapatkan:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

Setelah posting ini saya mencoba chmod +600 file pem, tapi sekarang ketika saya ssh saya baru saja mendapatkan:

Permission denied (publickey).

Kesalahan sekolah-anak apa yang saya buat di sini? File .pem ada di folder rumah saya (di osx). Izinnya terlihat seperti ini:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
Kesalahan ini juga terjadi ketika Anda menggunakan file pem yang salah.
Rahul Prasad

Pastikan juga Anda membuat instance Anda SETELAH Anda buat dan pilih pasangan kunci sebagai kunci yang ditunjuk untuk digunakan. Saya melakukan ini sebaliknya.
Gary

Saya di Windows dengan WinSCP. Tidak ada hubungannya dengan chmod 400 myfile.pempenggunaan yang myfile.ppkdihasilkan oleh PuTTYgen dari file pem.
Chetabahana

Kesalahan ini juga dapat terjadi ketika Anda tidak masuk dengan pengguna yang tepat;)
andrea06590

Jawaban:


1463

Masalahnya adalah salah mod pada file.

Mudah dipecahkan dengan mengeksekusi -

chmod 400 mykey.pem

Diambil dari instruksi Amazon -

File kunci Anda tidak boleh dapat dilihat oleh publik agar SSH berfungsi. Gunakan perintah ini jika diperlukan: chmod 400 mykey.pem

400 melindunginya dengan membuatnya hanya membaca dan hanya untuk pemilik.


3
Terima kasih banyak! Apa yang dilakukan chmod 400? ke mykey.pem?
Costa

19
400 melindunginya dengan membuatnya hanya membaca dan hanya untuk pemilik.
Kof

1
Setelah ini saya mendapatkan "Peringatan: File identitas blabla.pem tidak dapat diakses: Tidak ada file atau direktori" ketika saya melakukan ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
coolcool1994

3
Perintah ini + ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPmemperbaiki masalah. Mungkin ini seharusnya jawaban yang diterima ...
c4k

1
Bagaimana saya bisa menjalankan yang sama untuk windows?
Ahsan Mukhtar

262

Anda kemungkinan menggunakan nama pengguna yang salah untuk masuk:

  • sebagian besar gambar Ubuntu memiliki pengguna ubuntu
  • AMI Amazon adalah ec2-user
  • sebagian besar gambar Debian memiliki rootatauadmin

Untuk masuk, Anda perlu menyesuaikan perintah ssh Anda:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH


30
atau ssh -i key.pem ubuntu @ servername
jsh

43
Pesan kesalahan mengatakan semuanya: file .pem cert tidak cukup terlindungi. Lakukan chmod 400 xyz.pem seperti yang disarankan di bawah ini.
allprog

1
@allprog bagi saya ini hanya menyebabkannya untuk mengatakan Permission denied (publickey).dan tidak ada yang lain ...
Aram Kocharyan

1
Saya menemukan masalah - Saya tidak menggunakan kunci yang sama saya membuat contoh dengan
Aram Kocharyan

12
Ini bukan solusi - izin file pada file kunci yang diunduh adalah 844 secara default. harus 400 chmod 500 <path_to_pem_file>harus melakukannya.
Elad Meidar

62

Saya tahu ini sangat terlambat untuk permainan ... tapi ini selalu berhasil untuk saya:

Langkah 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

langkah 2, cukup ssh :)

ssh user_name@<instance public dns/ip>

misalnya

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

Semoga ini bisa membantu seseorang.


apakah "ssh-add" sama dengan hanya menyalin file * .pem ke folder ~ / .ssh?
ア レ ッ ク ス

1
>> hanya menyalin file * .pem ke folder ~ / .ssh Tidak sama, Anda harus menambahkan ke folder dan kemudian jalankan perintah ssh-add.
super_p

Sangat terlambat ke gim, tetapi untuk menambahkan beberapa klarifikasi ... 1. tambahkan file .pem ke direktori ~ / .ssh (buat jika perlu), 2. gunakan perintah ssh-add untuk menambahkan identitas ke otentikasi agen; ini berarti tidak pernah harus menentukan file .pem saat menggunakan ssh
Ian Atkin

2
Setelah ssh-add ¬ / .ssh / key.pem; Mendapatkan kesalahan Tidak dapat membuka koneksi ke agen otentikasi Anda. ssh-agent -slaporan eval SSH_AGENT_PID = 3409; ssh-add memberikan kesalahan yang sama seperti di atas ......... Setiap bantuan di sini plz
Tariq

Wow itu akan sangat nyaman untuk semua koneksi masa depan saya ke VPS saya. Terima kasih sobat :)
Ahmad Mushtaq

36

Ok man, satu-satunya hal yang berhasil untuk saya adalah:

  1. Ubah izin kunci

    chmod 400 mykey.pem

  2. Pastikan untuk masuk menggunakan ec2-user , dan alamat ec2-99 ... yang benar. Alamat ec2-99 ada di bagian bawah konsol aws ketika Anda masuk dan melihat instance Anda terdaftar

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


Saya tidak dapat menemukan alamat EC2-99. Bisakah kamu membantuku?
Adil Malik

1
chmod 400 mykey.pem login dengan ubuntu sebagai berikut: ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
Gal Bracha

27

Lihatlah artikel ini . Anda tidak menggunakan DNS publik melainkan formulir

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

di mana nama tersebut terlihat di panel AMI Anda


Ceria untuk artikel ini, sangat berguna!
Matt Roberts

perbaikan kecil: ketika mencoba masuk sebagai root aws meminta yang berikut: "Silakan masuk sebagai pengguna ec2-user daripada pengguna root."
Andre Schweighofer

bagaimana cara mengetahui apa ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com saya?
ア レ ッ ク ス

Konsol manajemen> EC2> Mesin Virtual dan pilih mesin virtual Anda.
renick

'Root @' adalah apa yang tidak ada di jawaban orang lain dalam jawaban ini. Anda membantu! Itu, dan chmod.
lordB8r


13

Di windows Anda dapat pergi ke properti file pem, dan pergi ke tab keamanan, lalu untuk memajukan tombol.

hapus warisan dan semua izin. kemudian berikan diri Anda kendali penuh. setelah semua SSL tidak akan memberikan Anda kesalahan yang sama lagi.


7

Saya tahu pertanyaan ini sudah dijawab tetapi bagi mereka yang telah mencoba semuanya dan Anda masih mendapatkan "Izin ditolak (publickey)" yang mengganggu. Coba jalankan perintah Anda dengan SUDO. Tentu saja ini adalah solusi sementara dan Anda harus menetapkan izin dengan benar tetapi setidaknya itu akan memungkinkan Anda mengidentifikasi bahwa pengguna Anda saat ini tidak berjalan dengan hak istimewa yang Anda butuhkan (seperti yang Anda asumsikan)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Setelah Anda melakukan ini, Anda akan mendapatkan pesan seperti ini:

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

Yang juga jarang didokumentasikan. Dalam hal ini lakukan saja ini:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

Dan Anda akan mendapatkan yang mulia:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
Terima kasih .. Saya masih mendapatkan kesalahan setelah mencoba semua opsi yang disebutkan di atas. Menjalankan ssh dengan sudo bekerja untuk saya.
Gursharan Singh

Saya ingin tahu mengapa saya harus menjalankan ini dalam sudo. Saya mencoba chmod 400 xyz.pem, tetapi tidak membantu.
Samuel Dominguez

6

Di terminal Mac, melakukan "chmod 400 xyz.pem" tidak membantu saya, itu terus mengatakan izin ditolak. Untuk pengguna ubuntu saya sarankan

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (perhatikan pengguna adalah ubuntu)

4

Praktik terbaik izin kunci dan file SSH:

  • direktori .ssh - 0700 (hanya oleh pemilik)
  • file kunci / .pem pribadi - 0400 (hanya baca oleh pemilik)
  • kunci publik / .pub file - 0600 (baca & tulis hanya oleh pemilik)

    chmod XXXX file/directory


3

ssh -i /.pem user @ host-machine-IP

Saya pikir itu karena Anda salah memasukkan kredensial atau, Anda menggunakan kunci publik daripada kunci pribadi atau, izin port Anda terbuka untuk SEMUA untuk ssh. Ini buruk untuk Amazon.


3

Alternatif masuk menggunakan Putty. Bagus tapi butuh beberapa langkah.

  1. Dapatkan .pem Anda yang dibuat saat pertama kali membuat instance EC2.
  2. Konversikan file .pem .ppk menggunakan PuttyGen karena Putty tidak membaca .pem.
  3. Buka Putty dan masukkan Nama Host Anda yang merupakan nama pengguna instan Anda + DNS Publik (mis. Ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). Bukan nama pengguna akun AWS Anda.
  4. Kemudian arahkan ke Connection> SSH> Auth . Kemudian tambahkan file .ppk Anda . Klik Browse di mana dikatakan "File kunci pribadi untuk otentikasi" .
  5. Klik Buka dan Anda harus dapat segera membuat koneksi.

Saya menggunakan Putty 0,66 di Windows.


Ini berfungsi, tetapi apakah ada cara untuk membuat koneksi ssh berfungsi langsung dari baris perintah?
Ariel

3

Selain jawaban lain, berikut adalah apa yang saya lakukan agar ini berfungsi:

  • Salin kunci ke folder .ssh jika Anda masih belum:

cp key.pem ~/.ssh/key.pem

  • Berikan izin yang tepat ke kunci

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Lalu, tambahkan kuncinya

ssh-add ~/.ssh/key.pem

Sekarang Anda harus dapat ssh EC2 (:


2

Lakukan chmod 400 yourkeyfile.pem Jika instance Anda adalah Amazon linux maka gunakan ssh -i yourkeyfile.pem ec2-user @ ip untuk ubuntu ssh -i yourkeyfile.pem ubuntu @ ip untuk centos ssh -i yourkeyfile.pem centos @ ip


2

Ada tiga alasan di balik kesalahan ini.

  1. Anda menggunakan kunci yang salah.
  2. Kunci Anda tidak memiliki izin yang benar. Anda perlu chmod ke 400.
  3. Anda menggunakan pengguna yang salah. Gambar Ubuntu memiliki pengguna ubuntu , Amazon AMI adalah pengguna ec2 dan gambar debian memiliki root atau admin

2

Masalahnya bagi saya adalah bahwa file .pem saya ada di salah satu partisi NTFS saya. Saya memindahkannya ke partisi linux saya (ext4).

Memberi izin yang diperlukan dengan menjalankan:

chmod 400 my_file.pem

Dan itu berhasil.


2

Nah, melihat deskripsi posting Anda, saya merasa ada 2 kesalahan yang dilakukan oleh Anda: -

  1. Tetapkan izin yang benar untuk kunci pribadi . Perintah di bawah ini akan membantu Anda untuk mengatur izin file yang benar.

    chmod 0600 mykey.pem

  2. Pengguna ec2 salah yang Anda coba masuki .

    Melihat log debug Anda, saya pikir Anda telah menelurkan instance Amazon linux. Pengguna default untuk tipe instance itu adalah ec2-user. Jika instansinya adalah ubuntu maka pengguna default Anda adalah ubuntu ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

sumber: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInancesLinux.html


1

Daftar periksa:

  1. Apakah Anda menggunakan file .pem kunci pribadi yang tepat?

  2. Apakah izinnya diatur dengan benar? (AMI merek Amazon saya bekerja dengan 644, tetapi Red hat harus setidaknya 600 atau 400. Tidak tahu tentang Ubuntu.)

  3. Apakah Anda menggunakan nama pengguna yang tepat di ssh line Anda? Amazon-branded = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". Pengguna dapat ditentukan sebagai "ssh -i pem usename @ hostname" OR "ssh -l nama pengguna -i pem hostname"


1

Cukup ubah izin file pem ke 0600 yang memungkinkan hanya untuk pengguna yang diizinkan dan itu akan berfungsi seperti pesona.

sudo chmod 0600 myfile.pem

Dan kemudian coba ssh itu akan bekerja dengan sempurna.

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

DENGAN izin default tidak mengizinkan kunci pem. Anda hanya perlu mengubah izin:

chmod 400 xyz.pem

dan jika ubuntu instance kemudian terhubung menggunakan:

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


1

File kunci tidak boleh dapat dilihat oleh umum, jadi gunakan izin 400

chmod 400 keyfile.pem

Jika perintah di atas menunjukkan kesalahan penggunaan izin

sudo chmod 400 keyfile.pem

Sekarang ssh ke mesin EC2, jika Anda masih menghadapi masalah, gunakan EC2-pengguna

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

0,400 melindunginya dengan membuatnya hanya membaca dan hanya untuk pemilik.
Anda dapat menemukan jawabannya dari panduan ASW.

chmod 400 yourPrivateKey.pem

masukkan deskripsi gambar di sini


0

Berikut ini adalah langkah-langkah sederhana bagi pengguna Linux untuk terhubung dengan server menggunakan file .pem:

Langkah1: Ke ke lokasi file pem dan salin ke lokasi .ssh rumah.

cp example.pem ~/.ssh/example.pem

Langkah2: Ubah izin

chmod 400 ~/.ssh/example.pem

Langkah 3: Jalankan perintah berikut

ssh -i ~/.ssh/example.pem ec2-user@host.com

Karena perintah ini terlalu panjang sehingga Anda dapat membuat alias dari ini menggunakan perintah berikut:

 vim ~/.bashrc

Tuliskan perintah yang sama dengan cara berikut pada akhirnya.

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

Sekarang restart sistem Anda dan gunakan sshConnectuntuk terhubung dengan server Anda.


0

Ini hanya masalah izin dengan kunci aws pem Anda.

Cukup ubah izin tombol pem ke 400 menggunakan perintah di bawah ini.

chmod 400 pemkeyname.pem

Jika Anda tidak memiliki izin untuk mengubah izin file, Anda dapat menggunakan sudo seperti perintah di bawah ini.

sudo chmod 400 pemkeyname.pem

Saya harap ini bekerja dengan baik.


0

Saya telah melihat dua alasan di balik masalah ini

1) kunci akses tidak memiliki izin yang tepat. kunci pem dengan izin default tidak diizinkan untuk membuat koneksi yang aman. Anda hanya perlu mengubah izin:

chmod 400 xyz.pem

2) Juga periksa apakah Anda telah masuk dengan kredensial pengguna yang tepat. Kalau tidak, gunakan sudo saat menghubungkan

sudo ssh -i {keyfile} ec2-user @ {alamat ip host jarak jauh}


0

Kunci Anda tidak boleh dapat dilihat oleh publik agar SSH berfungsi. Gunakan perintah ini jika perlu:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Contoh:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

Harap abaikan jawaban ini jika tidak relevan untuk Anda, tetapi dari pengalaman saya, saya telah melihat orang-orang mengalami masalah Permission denied (publickey)karena mereka hanya menempelkan kunci publik mereka (pada mesin target) tanpa huruf pertama !

Ini terjadi ketika menggunakan vim untuk mengedit (menempel) kunci. Karena vim secara default terbuka dalam mode perintah (bukan dalam mode insert ), menempelkan tombol tanpa beralih ke mode insert (yaitu i) akan mengakibatkan melewatkan shuruf pertama , misalnya alih-alih

ssh-rsa <key>

Anda akhirnya menempelkan

sh-rsa <key>

Jadi sebelum mencoba solusi lain, lihat apakah Anda telah menempelkan kunci Anda dengan benar ! yaitu

cat ~/.ssh/id_rsa.pub

Hanya jika Anda yakin, lakukan langkah selanjutnya; mencoba ssh dalam mode verbose (yaitu flag -v) mungkin mengarahkan Anda ke masalah aktual:

ssh -v -i <private_key> <name>@<ip> -p <port>

Sebagai catatan tambahan, seperti yang telah disebutkan di sini oleh orang lain, dalam sebagian besar kasus, memulai agen ssh kosong (program yang menyimpan kunci Anda di memori) dan menambahkan kunci Anda harus menyelesaikan masalah:

ssh-agent bash
ssh-add <private_key>

-1

Apa yang diperbaiki bagi saya adalah memindahkan file .pem di dalam direktori apps. Soo say fooapp adalah nama aplikasi saya. Saya menempatkannya langsung di sana.


-2

Terkadang mungkin ada kesalahan dalam folder. Saya tidak tahu kenapa...

Anda dapat mengubah folder dan coba lagi. Misalnya, Anda dapat melakukan percobaan di folder biasa (Desktop, Unduhan, dll.).

Saya mencoba metode ini dan berhasil


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.