Terlalu banyak kegagalan otentikasi untuk * nama pengguna *


256

Saya memiliki akun hostgator dengan akses ssh diaktifkan. Saat mencoba mengunggah file kunci .pub yang dihasilkan dengan perintah ini:

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub username@111.222.33.44:.ssh/authorized_keys

Saya terus mendapatkan:

Menerima putuskan sambungan dari 111.222.33.44: 2: Terlalu banyak kegagalan otentikasi untuk nama pengguna
rsync: koneksi ditutup secara tak terduga (0 byte diterima sejauh ini) [pengirim]
rsync error: error yang tidak dapat dijelaskan (kode 255) di io.c (601) [pengirim = 3.0.7]

Saya sudah bermain-main sebelumnya dengan ssh sampai saya mendapat kegagalan auth. Tapi sekarang tampaknya penghitung kegagalan auth tidak diatur ulang (telah menunggu lebih dari 12 jam sekarang, dukungan teknis "mengandaikan" itu diatur ulang setelah 30 menit menjadi 1 jam, dan orang lain mengatakan kepada saya "itu akan disetel ulang setiap kali Anda mencoba masuk dengan nama pengguna ", jeesh).

Ini membuatku gila. Saya bahkan mengatur ini di server khusus Slicehost dan memiliki lebih sedikit masalah dibandingkan dengan orang-orang ini.

Ada tips? Mungkin itu adalah sisi klien dan bukan sisi server.


Dalam kasus saya ada kesalahan dalam menghasilkan kunci. Saya menghasilkan kunci dan saya tidak menyebutkan alamat sumber dan menggunakan nama pengguna di akhir kunci.
reporter

Jawaban:


416

Ini biasanya disebabkan oleh secara tidak sengaja menawarkan beberapa kunci ssh ke server. Server akan menolak kunci apa pun setelah terlalu banyak kunci yang ditawarkan.

Anda dapat melihat ini sendiri dengan menambahkan -vflag pada sshperintah Anda untuk mendapatkan output verbose. Anda akan melihat bahwa banyak kunci ditawarkan, sampai server menolak koneksi dengan mengatakan: "Terlalu banyak kegagalan otentikasi untuk [pengguna]" . Tanpa mode verbose, Anda hanya akan melihat pesan ambigu "Koneksi reset oleh rekan" .

Untuk mencegah kunci yang tidak relevan ditawarkan, Anda harus secara eksplisit menentukan ini di setiap entri host di file ~/.ssh/config(pada mesin klien) dengan menambahkan IdentitiesOnlyseperti:

Host www.somehost.com
  IdentityFile ~/.ssh/key_for_somehost_rsa
  IdentitiesOnly yes
  Port 22

Jika Anda menggunakan ssh-agent, itu membantu untuk menjalankan ssh-add -Duntuk menghapus identitas.

Jika Anda tidak menggunakan konfigurasi host ssh, Anda harus secara eksplisit menentukan kunci yang benar dalam sshperintah seperti ini:

ssh -i some_id_rsa -o 'IdentitiesOnly yes' them@there:/path/

Catatan: parameter 'IdentitiesOnly yes' harus berada di antara tanda kutip.

atau

ssh -i some_id_rsa -o IdentitiesOnly=yes them@there:/path/

5
tidak jelas bagi saya di mana harus meletakkan garis ini. Di server tempat saya mencoba masuk, .ssh / config hanya memiliki informasi untuk server lain. Apakah maksud Anda bahwa ini harus masuk dalam file .ssh / config di komputer yang saya coba ssh? Jika demikian, ini tidak jelas karena jawaban Anda mengatakan "begitu Anda masuk kembali ..."
David LeBauer

2
Saya harus meletakkan opsi dalam tanda kutip ganda, seperti ini:ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/
knb

1
Pengguna Windows yang menjalankan PAGENT (Putty Agent), periksa untuk memastikan Anda hanya memiliki kunci yang perlu dimuat. Saya mengalami masalah ini setelah secara tidak sengaja memuat SEMUA kunci pribadi saya.
Chris Rasco

2
Pertanyaannya tetap: mengapa ssh"menawarkan beberapa kunci" (apa pun di bawah ~/.ssh) bahkan ketika aturan untuk host memiliki IdentityFile /path/to/private_key_filepengaturan eksplisit . Tidakkah kunci yang ditentukan secara eksplisit ini harus (paling tidak) ditawarkan terlebih dahulu? Bukankah ini bug / kesalahan dalam klien openssh?
arielf

2
Tapi bukankah harus menggunakan kunci yang ditentukan dengan IdentityFileopsi? Misalnya, tanpa IdentitiesOnlyopsi, ia mencoba menggunakan githubkunci saya ketika saya mencoba ssh gitlab.com. Itu tidak masuk akal.
Iulian Onofrei

188

Saya menemukan cara yang lebih mudah untuk melakukan ini (jika menggunakan otentikasi kata sandi):

ssh -o PubkeyAuthentication=no username@hostname.com

Ini memaksa otentikasi non-kunci. Saya bisa masuk segera.

Referensi


3
+1, berharap saya bisa memberi Anda lebih banyak. Raspberry Pi adalah satu-satunya perangkat yang saya ssh masuk tanpa kunci publik. Semakin: "Terlalu banyak kegagalan otentikasi untuk pi"
blak3r

1
Dan untuk menggunakannya dengan rsync:rsync -av -e 'ssh -o PubkeyAuthentication=no' 'user@host.com:~/remote_file' 'local_file'
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
Anda juga dapat membuat Alias ​​untuk membuatnya lebih cepat untuk kata sandi auth. alias sshp = 'ssh -o PubkeyAuthentication = no'
dhempler

26

Saya mendapatkan kesalahan ini juga dan menemukan bahwa itu terjadi b / c server dikonfigurasi untuk menerima hingga 6 percobaan:

/etc/ssh/sshd_config
...
...
#MaxAuthTries 6

Selain mengatur IdentitiesOnly yesdalam ~/.ssh/configfile Anda, Anda memiliki beberapa opsi lain.

  1. Tambah MaxAuthTries(di server ssh)
  2. hapus beberapa pasangan kunci yang ada di ~/.ssh/direktori Anda & jalankanssh-add -D
  3. secara eksplisit menautkan kunci ke host yang diberikan dalam ~/.ssh/configfile Anda

Seperti itu:

host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
  1. Mungkin bukan cara yang baik untuk melakukannya, mengingat sedikit melemahkan server ssh Anda karena sekarang akan menerima lebih banyak kunci dalam upaya koneksi yang diberikan. Pikirkan vektor serangan brute force di sini.

  2. Merupakan cara yang baik untuk mengasumsikan Anda memiliki kunci yang tidak diperlukan dan dapat dihapus secara permanen.

  3. Dan pendekatan pengaturan IdentitiesOnly mungkin merupakan cara yang disukai untuk menangani masalah ini!


Di baris terakhir Anda, Anda telah mengidentifikasi file / home / YOU/.ssh/foo tetapi file tersebut harus berupa file identitas (bukan f)
Nin

7

Saya menambahkan ke ~ / .ssh / config ini:

Host *
IdentitiesOnly yes

Ini mengaktifkan opsi IdentitiesOnly = yes secara default. Jika Anda perlu terhubung dengan kunci pribadi, Anda harus menentukannya dengan opsi -i


6

Jika Anda mendapatkan Galat SSH berikut:

$ Received disconnect from host: 2: Too many authentication failures for root

Ini dapat terjadi jika Anda memiliki (default pada sistem saya) lima atau lebih file identitas DSA / RSA yang disimpan dalam direktori .ssh Anda dan jika opsi '-i' tidak ditentukan pada baris perintah.

Klien ssh pertama-tama akan mencoba masuk menggunakan setiap identitas (kunci pribadi) dan permintaan berikutnya untuk otentikasi kata sandi. Namun, sshd menjatuhkan koneksi setelah lima upaya login yang buruk (sekali lagi default dapat bervariasi).

Jika Anda memiliki sejumlah kunci pribadi di direktori .ssh Anda, Anda dapat menonaktifkan "Otentikasi Kunci Publik" di baris perintah menggunakan argumen opsional '-o'.

Sebagai contoh:

$ ssh -o PubkeyAuthentication=no root@host

Inilah yang sebenarnya terjadi pada saya! Terima kasih banyak untuk penjelasannya;)
El Ninja Trepador

6

Jika Anda memiliki kata sandi, dan hanya ingin menggunakan kata sandi untuk masuk, berikut adalah cara melakukannya.

Untuk menggunakan HANYA otentikasi kata sandi dan BUKAN menggunakan kunci Publik, dan BUKAN menggunakan "keyboard-interactive" yang agak menyesatkan (yang merupakan superset termasuk kata sandi), Anda dapat melakukan ini dari baris perintah:

ssh -o PreferredAuthentications=password user@example.com

3

Keluar dari @David pepatah, tambahkan saja ini IdentitiesOnly yes ke .ssh / config Anda, ia melakukan hal yang samassh -o PubkeyAuthentication=no.

Setelah Anda masuk, hapus .ssh/authorized_keys. Sekarang, kembali ke mesin lokal dan ketik yang berikut ini

cat ~/.ssh/id_rsa.pub | ssh -o PubkeyAuthentication=no user@IP_ADDR 'cat >> .ssh/authorized_keys'. Ini harus mengaktifkan kembali ssh Anda dengan kunci publik


2

Saya tahu ini adalah utas lama, tetapi saya hanya ingin menambahkan di sini bahwa saya mengalami pesan kesalahan yang sama, tetapi itu disebabkan oleh pemilik folder .ssh yang menjadi root daripada pengguna yang menggunakan kunci. Saya memperbaiki masalah ini dengan menjalankan perintah berikut:

sudo chown -R user:user /home/user/.ssh

Saya juga memastikan izin sudah benar pada folder .ssh:

sudo chmod 700 /home/user/.ssh

File-file di dalam direktori .ssh harus memiliki izin 600:

sudo chmod 600 /home/user/.ssh/authorized_keys

Saya akan berhati-hati menggunakan ini tanpa peringatan. Izin kunci SSH biasanya dibatasi hingga 400 untuk beberapa kunci, AWS tertentu. Mencoba menetapkannya di atas yang akan mengakibatkan kunci tidak diterima, dan itu dapat mengunci Anda dari akun AWS Anda.
Michael Ryan Soileau

1

Dalam kasus saya, masalahnya adalah izin direktori. Ini memperbaikinya untuk saya:

$ chmod 750 ~;chmod 700 ~/.ssh


0

Saya .ssh/authorized_keys2memasukkan kunci publik saya , tetapi server dikonfigurasi untuk hanya membaca .ssh/authorized_keys:

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

Setelah memindahkan file saya .ssh/authorized_keys, saya dapat login dengan sukses dengan kunci saya.


0

Terlalu banyak kegagalan otentikasi

Pesan ini disebabkan oleh terlalu banyak upaya otentikasi yang gagal mengingat batas yang diizinkan diberlakukan pada server SSH jauh. Ini berpotensi berarti bahwa Anda memiliki terlalu banyak identitas yang ditambahkan dalam agen SSH.

Berikut beberapa saran:

  • Tambahkan -vuntuk melihat apakah itu masalahnya (Anda telah menggunakan terlalu banyak identitas).
  • Daftar identitas yang ditambahkan oleh ssh-add -l.
  • Hapus gagal identitas dari agen dengan: ssh-add -d.
  • Anda juga dapat menghapus semua identitas dengan ssh-add -Ddan hanya menambahkan kembali yang relevan.
  • Jika Anda memiliki akses ke server SSH, centang MaxAuthTriesopsi (lihat man sshd_config:).

    Posting terkait: Apa koneksi untuk sshd_configbatas 'MaxAuthTries'?

  • Jika tidak ada yang membantu, pastikan apakah Anda menggunakan kredensial atau file yang tepat.


-1

Pesan ini dapat muncul ketika nama pengguna dan kata sandi yang benar tidak dimasukkan.

Pertama periksa apakah pengguna terdaftar:

vim /etc/passwd
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.