Izin SSH ditolak (publickey)


110

Saya mencoba untuk terhubung ke Linode (menjalankan Ubuntu 12.04 LTS) dari mesin lokal saya (juga menjalankan Ubuntu 12.04 LTS)

Saya telah membuat kunci pribadi dan publik pada mesin lokal saya dan menyalin kunci publik saya ke file Lin_'s berwenang saya. Namun, setiap kali saya mencoba ssh ke Linode saya, saya mendapatkan pesan kesalahan Permission denied (publickey).

Ini bukan masalah dengan bagaimana ssh diatur pada Linode saya karena saya bisa ssh untuk itu dari mesin Windows saya menggunakan otentikasi kunci.

Dalam .sshdirektori saya di mesin Ubuntu lokal saya, saya punya file saya id_rsadan id_rsa.pub. Apakah saya perlu membuat file yang diotorisasi pada mesin lokal saya?

EDIT: Ini adalah apa yang saya dapatkan ketika saya menjalankan ssh -vvv -i id_rsa [youruser]@[yourLinode]:

debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).

4
1) Apa yang dicatat oleh log pada server SSH tentang waktu Anda memiliki kesalahan ini pada klien? ( /var/log/auth.log) 2) Bagaimana Anda mentransfer kunci publik ke server? Selalu gunakan ssh-copy-iduntuk memastikan tentang izin. Direktori rumah Anda, .sshdirektori dan authorized_keysfile memiliki persyaratan izin yang ketat. (lihat halaman manual dari sshd(8) pada ~/.ssh/authorized_keys). 3) Apakah Anda menghasilkan keypair baru di Ubuntu? Jika Anda menggunakan kembali kunci dari Windows - Anda harus mengubahnya menjadi format OpenSSH terlebih dahulu.
gertvdijk

1
Perintah harus telah ssh -vvv -i .ssh/id_rsa ....(perhatikan jalan untuk id_rsa!) - silahkan ganti - log tua hanya menunjukkan bahwa "kita" tidak pubkey untuk mengirim.
guntbert

@ guntbert Saya ketinggalan .ssh karena saya sudah ada di direktori .ssh. Saya juga mencobanya dengan .ssh / id_rsa tapi saya mendapat hasil yang sama
Pattle

Begitu, jadi saya salah membaca - Harap jawab pertanyaan dari @gertvdijk.
guntbert

Adakah yang bisa mengomentari stackoverflow.com/questions/51254328/unable-to-ssh-to-bitbucket Saya punya masalah serupa.
Mrinmay Kalita

Jawaban:


90

PubKeyAuthentication

Siapkan klien Anda

  1. Buat kunci Anda
    • ssh-keygen
  2. Konfigurasikan ssh untuk menggunakan kunci
    • vim ~/.ssh/config
  3. Salin kunci Anda ke server Anda
    • ssh-copy-id -i /path/to/key.pub SERVERNAME

File konfigurasi Anda dari langkah 2 harus memiliki sesuatu yang mirip dengan yang berikut:

Host SERVERNAME
Hostname ip-or-domain-of-server
User USERNAME
PubKeyAuthentication yes
IdentityFile ./path/to/key

Anda dapat menambahkan IdentitiesOnly yesuntuk memastikan sshpenggunaan IdentityFiledan tidak ada keyfile lain selama otentikasi, yang dapat menyebabkan masalah dan bukan praktik yang baik.

Penyelesaian masalah

  1. gunakan opsi "-vvv"
  2. Pastikan server memiliki kunci PUBLIC Anda (.pub).
  3. Pastikan IdentiyFile Anda menunjuk ke kunci PRIVATE Anda.
  4. Pastikan direktori .ssh Anda memiliki 700 dan file Anda adalah 700 izin (rwx ------).
  5. tail -f /var/log/auth.log (di server) dan pantau kesalahan saat Anda mencoba masuk
  6. Jika Anda memiliki banyak file kunci, coba IdentitiesOnly yesbatasi otentikasi untuk menggunakan kunci tunggal yang ditentukan.

1
FYI, saya membuat skrip kecil di github.com/centic9/generate-and-send-ssh-key yang menjalankan langkah-langkah yang diperlukan sekaligus dan juga memastikan semua izin file / direktori yang selalu membuat saya sakit kepala ...
centic

1
Hanya untuk menguraikan langkah 2: IdentityFilebaris di ~ / .ssh / config harus mengarah ke kunci PRIVATE.
Danny Schoemann


3
Saya bertanya-tanya mengapa Anda ingin mengatur file agar memiliki izin eksekusi di langkah 4?
Todd Walton

Ini juga izin hak yang sangat penting per pengguna (gunakan chown dan chmod) jika tidak, Anda akan mendapatkan otentikasi yang ditolak meskipun server Anda memiliki kunci publik Anda.
joseluisq

61

Terkadang masalah datang dari izin dan kepemilikan. Misalnya, jika Anda ingin masuk sebagai root /root,, .sshdan authorized_keysharus milik root. Jika tidak, sshd tidak akan dapat membacanya dan karena itu tidak akan dapat mengetahui apakah pengguna berwenang untuk masuk.

Di direktori home Anda:

chown -R your_user:your_user .ssh

Adapun hak, pergi dengan 700 untuk .sshdan 600 untukauthorized_keys

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

1
Jawaban ini membantu saya. Saya telah mengambil saran dari posting ini dan memindahkan authorized_keysfile saya di luar direktori home terenkripsi saya. Dengan melakukan hal itu, saya secara tidak sengaja mengubah kepemilikan root:root.
Jordan Grant

Seandainya saya bisa memilih dua kali, sekali untuk folder dan sekali untuk file. Sangat penting bahwa izinnya tepat.
Tn. Griever

Yup, itu adalah izin selama ini.
a3y3

ini memecahkan masalah saya, terima kasih untuk itu.
sathiyarajan

14

Anda tidak perlu authorized_keyspada klien Anda.

Anda harus memberi tahu ssh-client untuk benar-benar menggunakan kunci yang Anda buat. Ada beberapa cara untuk melakukannya. Hanya untuk tipe pengujian ssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode]. Anda harus memberikan frasa sandi Anda setiap kali Anda ingin terhubung ke server.

Jika itu berhasil, Anda dapat menambahkan kunci dengan ssh-agentwith ssh-add .ssh/id_rsa(Anda harus memberikan frasa sandi hanya sekali untuk ini dan itu akan berfungsi selama Anda tidak keluar / reboot)


Terima kasih atas bantuan Anda, saya telah mengedit jawaban saya untuk menunjukkan apa yang terjadi ketika saya mengetik apa yang Anda sarankan.
Pattle

2
untuk mentransfer kunci, pada klien, gunakan ssh-copy-id
Panther

@ bodhi.zazen Terima kasih, tapi saya sudah mentransfer kuncinya, itu bukan masalah
Pattle

4
"Anda harus memberi tahu ssh-client untuk benar-benar menggunakan kunci yang Anda hasilkan." Tidak, secara default akan mencari kunci di jalur default, misalnya ~/.ssh/id_rsa. Juga, penggunaan agen kunci sepenuhnya opsional dan tidak terkait dengan masalah sejauh yang saya bisa lihat.
gertvdijk

@ gertvdijk, Anda membuat asumsi di sini yang belum didukung oleh fakta - kami tidak tahu apa yang terjadi pada sistem.
guntbert

10

Periksa juga nilai PasswordAuthenticationdi /etc/ssh/sshd_configdan jika nodiubah yes. Jangan lupa untuk me-restart layanan ssh setelah itu.


4
OP tidak mencoba menggunakan otentikasi kata sandi. Mereka memiliki beberapa pengertian dan menggunakan kunci publik / pribadi.
ctrl-alt-delor

9

Masalah yang saya miliki adalah menggunakan kunci yang salah pada klien. Saya telah mengganti nama id_rsa dan id_rsa.pub menjadi sesuatu yang lain. Anda dapat mengubah nama mereka kembali ke default, atau ketika Anda mengeluarkan perintah ssh, gunakan seperti ini

ssh -i ~/.ssh/private_key username@host

1
tidak, gunakan kunci publik
St3an

@ St3an Anda meletakkan kunci publik di server, tetapi ketika Anda terhubung seperti Todd ada di atas, Anda menggunakan kunci pribadi Anda
Nathan F.

@NathanFiscaletti Anda tidak boleh membuka kunci pribadi Anda, itu sebabnya ini pribadi. Kunci pribadi digunakan oleh agen ssh lokal Anda untuk memeriksa apakah Anda benar-benar memberikan kunci publik yang sesuai dengan kunci pribadi Anda. Agen SSH antar mesin kemudian dapat menjamin bahwa pengguna adalah mereka yang mereka berpura-pura :-)
St3an

1
Persis. Itulah sebabnya ketika Anda terhubung, Anda memberikan kunci pribadi Anda ke ssh-client. Server menyimpan kunci publik Anda. Perintah dalam posting di atas adalah bagaimana kunci privat seharusnya digunakan.
Nathan F.

7

Juga pastikan bahwa direktori home pengguna (di server) benar-benar milik pengguna ssh'ing ke (diatur ke root: root dalam kasus saya).

Seharusnya:

sudo chown username:username /home/username;

Saya dapat ssh dengan kunci publik / pribadi dengan pengguna di kotak linux lokal saya (mis. Abc), berbeda dari pengguna di server jarak jauh (mis. Def@123.456.789). Saya hanya harus memastikan pengguna lokal memiliki file .ssh lokal (mis. Abc: abc, bukan root: abc) `
Michael

Ini berhasil dalam kasus saya
Zerquix18

3

Saya mengalami masalah ini baru-baru ini dengan server web saya.

Saya biasanya menyimpan daftar kunci resmi di semua server saya ~/.ssh/authorized_keys2. Dari pengalaman saya, sshdakan mencari ~/.ssh/authorized_keysatau ~/.ssh/authorized_keys2secara default.

Dalam kasus server web saya, /etc/ssh/sshd_configmemiliki baris ini

AuthorizedKeysFile    %h/.ssh/authorized_keys

dari pada

AuthorizedKeysFile    %h/.ssh/authorized_keys2

Saya menerapkan yang terakhir, me-restart daemon ssh saya, dan menyelesaikan masalah saya login dengan ssh menggunakan pubkey saya.


Terima kasih banyak, ini membantu saya mencari tahu bahwa baris ini sepenuhnya dikomentari dari konfigurasi!
Christian.D

2

Penyebab lain yang mungkin terjadi adalah dengan AllowedUserskonfigurasi di /etc/ssh/sshd_conf. CATATAN: daftar ini dibatasi ruang (tidak dibatasi koma) karena saya belajar dengan cara yang sulit.

AllowUsers user1 user2 user3

1

Jika semuanya gagal, periksa apakah pengguna login Anda milik ssh's DiizinkanGroup. Artinya, pengguna Anda adalah anggota grup yang ditampilkan di baris berikut di /etc/ssh/sshd_configserver:

AllowGroups ssh #Here only users of 'ssh' group can login

1

Saya kasus saya, klien adalah ubuntu 14.04lts, server menang 2012 server yang menjalankan cygwin. Saya menggunakan 'ssh administrator @ xxxx', ketika direktori server 2012 di cygwin adalah / home / Administrator. Jadi itu case sensitive, ketika saya mencoba 'ssh Administrator @ xxxx' (perhatikan huruf kapital A di Administrator) maka itu berfungsi dengan baik.

Pesan kesalahan seperti 'pengguna tidak ditemukan' akan menuntun saya ke solusi jauh lebih cepat daripada 'Izin ditolak (publickey, keyboard-interactive)'.


Seseorang harus mencatat masalah dengan proyek ssh menyarankan itu. Saya mengalami masalah serupa.
Ben Creasy

1

Saya memiliki masalah yang sama ketika menyalin kunci publik pengguna biasa (misalnya johndoe) dari sistem Centan cPanel ke server Ubuntu di AWS. Seperti yang disarankan oleh gertvdijk di atas, saya memeriksa /var/log/auth.logdan cukup yakin katanya Authentication refused: bad ownership or modes for directory /home/johndoe. Ternyata saya salah 777 /home/johndoeketika mencoba untuk menetapkan /home/johndoe/public_htmlsebagai virtualhost Document Root default untuk apache2 (itu tidak diperlukan untuk tugas itu juga).

Lihat juga jawabannya di sini dan di sini

Server hanya perlu memiliki kunci publik .ssh/authorized_keysdan klien (komputer yang sedang Anda kerjakan) perlu memiliki kunci pribadi (.pem, atau jika menggunakan SFTP dengan Filezilla, .ppk)


1

Bagi pengguna Putty seperti saya yang datang ke utas ini, Anda juga mungkin mendapatkan kesalahan ini jika Anda lupa menambahkan pengguna pengguna @ Ip!

Lainnya menjadi izin pada file kunci chmod ke 600)

ssh 1.1.1.1 -i /path/to/.pem file 
Permission denied (publickey).`

ssh user@1.1.1.1 -i /path/to/.pem file 

1

Inilah yang bekerja untuk saya, perbaikannya bukan milik saya tetapi saya lebih suka menuliskannya di sini kalau-kalau ada orang lain yang memiliki masalah yang sama.

Penulis asli mempostingnya di sini: digital-ocean-public-access-key-deny

sudo nano /etc/ssh/sshd_config

Ganti ini

UsePAM yes
IgnoreUserKnownHosts no
PasswordAuthentication no

Dengan ini

UsePAM no
IgnoreUserKnownHosts no
PasswordAuthentication yes

Simpan file dan mulai ulang ssh

reload ssh

ssh seharusnya bekerja sekarang meminta kata sandi


1

Saya memiliki masalah yang sama seperti yang dijelaskan dalam pertanyaan. Output dari mengeksekusi ssh -vvv -i id_rsa [youruser]@[yourLinode]di mesin klien mirip dengan yang dijelaskan dalam pertanyaan. Saya memeriksa semua izin file dan direktori seperti yang disarankan dalam jawaban lain, dan mereka benar.

Ternyata saat menyalin file yang dihasilkan id_rsa.pubke mesin server, sebagai file ~username/.ssh/authorized_keys, saya tidak sengaja menghapus kata ssh-rsadari awal. Menambahkannya memecahkan masalah.


1

Berfungsi di Ubuntu 16.04 juga.

Masalahnya ada di dalam sshd_configfile

Berikut adalah solusi ULTIMATE:

Log sebagai root ke server Ubuntu Anda

vi /etc/ssh/sshd_config

Sekarang pergilah ke bagian paling bawah dan ubah nilainya dari "tidak" menjadi "ya".

Seharusnya terlihat seperti ini:

Ubah ke tidak untuk menonaktifkan kata sandi teks yang disetel

PasswordAuthentication yes
service sshd reload

berlaku.

Sekarang Anda dapat dengan mudah menggunakan perintah berikut dari mesin LOCAL Anda (alias laptop dll)

Jadi Buka jendela terminal baru dan JANGAN masuk ke server, cukup masukkan perintah ini:

ssh-copy-id john @ serverIPAddress

(Ganti john dengan nama pengguna Anda).

kamu harus pergi untuk pergi


1

Beberapa orang bertanya-tanya mungkin telah mengatur akses ssh menjadi kunci hanya pada akun root kemudian membuat pengguna baru dan tidak menyadari bahwa mereka perlu

ssh root@your-ip-address

rsync --archive --chown=[user]:[user] ~/.ssh /home/[user]

logout

Lalu coba lagi. Ganti [pengguna] dengan akun pengguna baru Anda.

Ini biasa terjadi ketika mengatur server baru di DigitalOcean ketika Anda menggunakan ssh-keys pada pengaturan.

https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04


0

Dalam kasus saya, masalah ini disebabkan oleh menyalin .sshdirektori dari mesin yang lebih lama. Ternyata konfigurasi SSH saya yang lebih lama menggunakan kunci DSA yang sudah usang . Beralih ke sepasang kunci baru, kali ini berbasis RSA, memecahkan masalah bagi saya.


0

Metode berikut mungkin berfungsi jika Anda dapat mengakses machineA dan machineB secara mandiri (mis. Dari machineC).

Jika ssh-copy-id tidak berfungsi, otentikasi kata sandi dapat dinonaktifkan. Berikut ini adalah solusinya .

Memiliki kunci publik machineA di kunci resmi machineB (yaitu ~ / .ssh / otor_keys) akan memungkinkan Anda untuk melakukan ssh dari machineA. Ini juga berlaku untuk scp.

Setelah membuat pasangan kunci menggunakan: ssh-keygen

Pada machineA , jalankancat ~/.ssh/id_rsa.pub

Output sampel:

ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA

Salin kunci tercetak ( ⌘ Command+ C, atau CRTL+ C) lalu tambahkan ke file ~ / .ssh / authorized_keys pada mesinB .

Sebagai contoh, jalankan hal berikut di machineB :

echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys

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.