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?

rjmunro
sumber

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>
Kjetil Joergensen
sumber
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.

cas
sumber
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.

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

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

PreferredAuthentications=publickey
Rory
sumber
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