Bagaimana cara saya membuat ssh gagal daripada meminta kata sandi jika otentikasi kunci publik gagal?


107

Saya punya skrip yang menunjukkan beberapa server menggunakan otentikasi kunci publik. Salah satu server telah berhenti membiarkan skrip masuk karena masalah konfigurasi, yang berarti skrip macet dengan prompt "Kata sandi:", yang jelas-jelas tidak dapat menjawab, sehingga ia bahkan tidak mencoba server lainnya. dalam daftar.

Apakah ada cara untuk memberi tahu klien ssh untuk tidak meminta kata sandi jika otentikasi kunci gagal, tetapi untuk melaporkan kesalahan saat menghubungkan dan membiarkan skrip saya berlanjut?

Jawaban:


138

Untuk OpenSSH ada BatchMode, yang selain menonaktifkan permintaan kata sandi, harus menonaktifkan kueri frasa sandi untuk kunci.

BatchMode

Jika diatur ke "ya", kueri frasa / kata sandi akan dinonaktifkan. Opsi ini berguna dalam skrip dan pekerjaan batch lain di mana tidak ada pengguna yang menyediakan kata sandi. Argumennya harus “ya” atau “tidak”. Standarnya adalah "tidak".

Penggunaan sampel:

ssh -oBatchMode=yes -l <user> <host> <dostuff>

Otentikasi kunci publik yang dinonaktifkan ini untuk saya. Saya menetapkan sebagai ssh user @ host -C somecommand, namun. Apa yang membuat saya bekerja hanyassh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll

20

Tambahkan yang berikut ke Anda ~/.ssh/config:

PasswordAuthentication no

dan untuk menonaktifkan otentikasi kata sandi di server, tambahkan baris yang sama ke /etc/ssh/sshd_configdan restart sshd.


7
jika Anda tidak ingin menonaktifkan kata sandi auth untuk semua koneksi klien ssh, Anda juga dapat menentukan opsi pada baris perintah. tambahkan '-oPasswordAuthentication = no' ke perintah ssh Anda.
cas

7
Ini tidak mencegah prompt kata sandi. Script OP masih akan hang.
Joshua Swink

11

Jika Anda menggunakan dropbear, tambahkan saja opsi " -s" untuk menonaktifkan otentikasi kata sandi.


4
+1 karena tidak menganggap klien adalah openssh :-)
cas

8

Pada baris perintah (atau ~/.ssh/config) Anda dapat mengatur PreferredAuthentications.

PreferredAuthentications=publickey

Saya pikir, pada baris perintah, Anda perlu membungkus opsi dalam tanda kutip dan kemudian meneruskannya ke opsi -o.
Craig Walker

3
@CraigWalker Anda juga dapat meneruskannya apa adanya, yaitussh -o PreferredAuthentications=publickey
Tobias Kienzler

@CraigWalker Anda perlu mengutip jika Anda ingin menggunakan spasi untuk memisahkan opsi dan nilai misalnyassh "-oPreferredAuthentications publickey"
Timo
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.