Saya telah meletakkan file identitas ssh saya di dalam folder ~ / .ssh / saya. Saya mungkin memiliki sekitar 30 file di sana.
Ketika saya terhubung ke server, saya akan menentukan file identitas yang akan digunakan, dengan sesuatu seperti
ssh -i ~/.ssh/client1-identity [email protected]
Namun, jika saya tidak menentukan file identitas, dan hanya menggunakan sesuatu seperti ini:
ssh [email protected]
Saya mendapatkan kesalahan
Too many authentication failures for user123
Saya mengerti itu karena jika tidak ada file identitas yang ditentukan, dan ssh dapat menemukan file identitas, maka akan mencoba semuanya.
Saya juga mengerti bahwa saya dapat mengedit ~/.ssh/config
file dan tentukan sesuatu seperti:
Host example.com PreferredAuthentications keyboard-interactive,password
untuk mencegah koneksi dari mencoba file identitas yang diketahui.
Jadi, saya kira saya bisa memindahkan file identitas saya di luar ~/.ssh/
direktori, atau saya bisa menentukan setiap host yang saya ingin menonaktifkan otentikasi file identitas dalam file konfigurasi, tetapi apakah ada cara untuk memberitahu SSH untuk membeli default bukan mencari file identitas? Atau untuk menentukan yang akan dicari?
sumber
ssh -v
untuk mencari tahu pasti.Jawaban:
Anda dapat menggunakan
IdentitiesOnly=yes
opsi bersamaIdentityFile
(Lihat halaman manual ssh_config ). Dengan begitu, Anda dapat menentukan file mana yang harus dicari.Dalam contoh ini, ssh akan hanya lihat identitas yang diberikan dalam file ssh_config + 4 yang terdaftar di baris perintah (identitas yang diberikan oleh agen akan diabaikan):
Bentuk
-i
dan-o IdentityFile=
dipertukarkan.sumber
IdentitiesOnly yes
(tanpa "=")?Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option.
Jawaban singkat user76528 benar, tetapi saya baru saja mengalami masalah ini dan berpikir beberapa elaborasi akan berguna. Anda mungkin juga peduli dengan solusi ini jika Anda bertanya-tanya "Mengapa ssh mengabaikan opsi konfigurasi identityfile saya"?
Pertama, tidak seperti setiap opsi lain di ssh_config, ssh tidak menggunakan yang pertama
IdentityFile
yang ditemukannya. SebaliknyaIdentityFile
opsi menambahkan file itu ke daftar identitas yang digunakan. Anda dapat menumpuk banyakIdentityFile
opsi, dan klien ssh akan mencoba semuanya sampai server menerima satu atau menolak koneksi.Kedua, jika Anda menggunakan ssh-agent, ssh akan secara otomatis mencoba menggunakan kunci di agen, bahkan jika Anda belum menentukannya dengan opsi IdentityFile (atau -i) ssh_config. Ini adalah alasan umum Anda mungkin mendapatkan
Too many authentication failures for user
kesalahan. MenggunakanIdentitiesOnly yes
Opsi akan menonaktifkan perilaku ini.Jika Anda ssh sebagai banyak pengguna ke banyak sistem, saya sarankan menempatkan
IdentitiesOnly yes
di bagian global Anda dari ssh_config, dan menempatkan masing-masingIdentityFile
dalam subbagian Host yang sesuai.sumber
IdentitiesOnly yes
di bagian global dari ssh_config adalah apa yang dilakukan untuk saya. Terima kasih!Host * \ IdentityFile ~/.ssh/mykey
sebagai opsi konfigurasi, dan pada awalnya tampak aneh bahwa memiliki entri berbeda untuk situs tertentu, mis.Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
terus memasokmykey
dari padaspecialkey
. Jelas tidak jelas, sampai saya menyadari (dari jawaban Anda) bahwa entri IdentityFile ditumpuk dalam urutan evaluasi dan yang terakhir akan digunakan. MenghapusIdentityFile ~/.ssh/mykey
memecahkan masalah, dan kunci tunggal yang benar digunakan.git pull/push
perintah mencoba setiap identitas yang dimuat di agen saya. Itu tidak masalah sampai pada satu titik saya punya terlalu banyak kunci.Saya biasanya melakukannya seperti ini:
Opsinya adalah sebagai berikut:
-o IdentitiesOnly=yes
- Memberitahu SSH untuk hanya menggunakan kunci yang disediakan melalui CLI dan tidak ada dari$HOME/.ssh
atau melalui ssh-agent-F /dev/null
- Menonaktifkan penggunaan$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- kunci yang ingin Anda gunakan secara eksplisit untuk koneksiContoh
Perhatikan pada output di atas itu
ssh
hanya mengidentifikasimy_id_rsa
kunci pribadi melalui CLI dan itu menggunakannya untuk terhubung ke someserver.Khususnya bagian ini:
dan:
sumber
-F /dev/null
adalah bagian yang hilang dalam jawaban lainnya.Dalam skenario di mana Anda memiliki banyak kunci, Anda akan selalu mengalami kesalahan "Terlalu Banyak Kegagalan Otentikasi". 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:
sumber
Gunakan IdentityFile tetapi Tetap Menggunakan ssh-agent untuk Menghindari Passphrase Reprompts
Solusi penggunaan yang diterima
IdentitiesOnly yes
berarti Anda tidak akan pernah dapat mengambil keuntungan dari ssh-agent, menghasilkan permintaan berulang untuk frasa sandi Anda saat memuat kunci Anda.Untuk terus menggunakan
ssh-agent
dan menghindari kesalahan 'Terlalu banyak kegagalan otentikasi', coba ini:Hapus semua skrip startup konsol interaktif yang secara otomatis memuat kunci
ssh-agent
.menambahkan
AddKeysToAgent yes
ke konfigurasi ssh klien Anda. Ini akan meminta Anda untuk frasa sandi pada koneksi pertama, tetapi kemudian menambahkan kunci ke agen Anda.menggunakan
ssh-add -D
ketika Anda mendapatkan kesalahan 'terlalu banyak otentikasi'. Ini hanya 'me-reset' (menghapus) cache ssh-agent Anda. Kemudian coba koneksi lagi dalam sesi yang sama. Anda akan dimintai kata sandi, dan setelah diterima, kata itu akan ditambahkan ke agen Anda. Karena Anda hanya memiliki satu kunci di agen Anda, Anda akan diizinkan untuk terhubung. ssh-agent kemudian masih ada untuk koneksi di masa depan selama sesi yang sama untuk menghindari reprompts.sumber
Klien ssh dan ssh-agent berkomunikasi melalui soket domain Unix yang namanya ditentukan untuk klien oleh variabel lingkungan SSH_AUTH_SOCK (ditetapkan oleh agen saat startup-nya).
Dengan demikian, untuk mencegah satu permintaan klien dari permintaan agen, variabel ini dapat diatur secara eksplisit untuk sesuatu yang tidak valid, seperti string kosong;
Doa klien seperti ini akan gagal berkomunikasi dengan agen dan hanya dapat menawarkan identitas yang tersedia sebagai file di ~ / .ssh /, atau apa pun yang ditentukan pada baris perintah menggunakan -i, ke server.
sumber
Anda punya jawaban selama ini (hampir):
Bekerja untukku.
sumber