Bagaimana memaksa klien ssh untuk hanya menggunakan kata sandi auth?

375

Jika saya menggunakan pubkey auth dari eg: Ubuntu 11.04 bagaimana saya bisa mengatur klien ssh untuk hanya menggunakan kata sandi auth ke server? (hanya diperlukan karena pengujian kata sandi di server, di mana saya default masuk dengan kunci)

Saya menemukan cara:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

dan sekarang saya dimintai kata sandi, tetapi apakah ada cara resmi?

LanceBaynes
sumber

Jawaban:

579

Saya baru-baru ini membutuhkan ini juga, dan muncul dengan ini:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Anda perlu memastikan bahwa klien tidak dikonfigurasi untuk melarang otentikasi kata sandi.

sendok
sumber
4
Saya perlu menegakkan prompt kata sandi untuk muncul di lingkungan di mana Kerberos digunakan untuk otentikasi otomatis, dan perintah serupa bekerja untuk saya dalam situasi khusus itu: ssh -o GSSAPIAuthentication=no example.com
IllvilJa
21
Bagus. Hanya -o PubkeyAuthentication=nocukup dalam kasus saya.
mivk
10
untuk ssh ke laptop teman osx, saya harus menggunakan: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no sebaliknya
guido
4
Ini tidak berhasil untuk saya. Ia terus mengatakan: Izin ditolak (publickey). dan tidak pernah menawarkan prompt kata sandi.
reinierpost
7
@reinierpost kemungkinan karena host ssh telah dinonaktifkan PasswordAuthentication. Sebenarnya, saya di sini karena saya ingin menguji apakah menonaktifkan kata sandi auth berfungsi dengan benar pada host saya.
RubberDuck
169

Saya telah menemukan jalan pintas untuk tujuan ini:

ssh user:@example.com

Perhatikan titik dua ( :) dan kata sandi kosong setelahnya.

Halil Özgür
sumber
2
Belum ada dokumentasi. Sebenarnya, saya telah membaca kode sumber OpenSSH tanpa hasil (tahap penguraiannya agak samar dan sudah pagi di sini :)). Motivasi awal saya: banyak klien meminta kata sandi jika Anda memberikan kata sandi kosong, misalnyamysql -u user -p
Halil Özgür
43
Ini sepertinya tidak berfungsi lagi, setidaknya tidak dalam kasus saya. sshklien secara membabi buta mencoba kunci pribadi yang tidak terkait untuk mengautentikasi ke server yang baru diinstal dan tetap ditolak karena jumlah upaya maksimum yang dicapai tanpa pernah meminta kata sandi. Untuk memaksakan otentikasi kata sandi untuk koneksi pertama ini, saya harus menggunakan -o PreferredAuthentications=passwordsintaks, trik usus besar yang tidak memiliki efek nyata. Jadi, meskipun trik ini mungkin layak untuk dicoba, kita tidak boleh mengandalkannya sebagai perilaku yang konsisten.
WhiteWinterWolf
2
@ HalilÖzgür: Berita sedih, jauh lebih mudah untuk diingat dan mengetik;)!
WhiteWinterWolf
3
@Qualcuno seperti yang dikatakan WhiteWinterWolf, itu tidak bekerja pada beberapa platform lagi, sayangnya.
Halil Özgür
2
Pastikan Anda tidak memiliki Kata Sandi Otentikasi no pada file ssh_config Anda!
Braiam
32

Selain metode yang diposting oleh scoopr, Anda dapat mengatur opsi per host di file konfigurasi klien ssh Anda.

Di .sshdirektori Anda , buat file bernama config(jika belum ada) dan setel izin 600, Anda kemudian dapat membuat bagian yang dimulai dengan

host <some hostname or pattern>

dan kemudian mengatur per opsi host setelah itu, misalnya,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

jadi kamu bisa

host server.to.test
PubkeyAuthentication=no

dalam file itu, dan kemudian secara sederhana

ssh server.to.test

dan opsi akan diambil.

EightBitTony
sumber
Terima kasih atas jawaban ini. Saya membuat entri di saya ~/.ssh/configdan menambahkanPubkeyAuthentication no
Craig London
2
Tidak bekerja untuk saya.
reinierpost
11

Saya baru-baru ini membutuhkan ini tetapi tidak ada opsi di atas yang berfungsi, ssh -vmenunjukkan bahwa opsi baris perintah yang dilewatkan melalui -osaklar ditunggangi oleh nilai-nilai yang ditentukan dalam ~/.ssh/configfile saya .

Apa yang berhasil adalah ini:

ssh -F /dev/null <username>@<host>

Dari sshhalaman manual:

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Penghargaan untuk jawaban ini: Bagaimana saya bisa membuat ssh abaikan .ssh / config?

adeelx
sumber
1
ini tidak menjawab pertanyaan. Anda selalu dapat menyimpan kunci di agen dan pendekatan Anda tidak akan mencegah klien menggunakannya.
Jakuje
Hm, bagaimana seseorang akan memulihkan bahwa masalah serta yang saya sebutkan dalam jawaban saya?
adeelx
2
Juga jika Anda memiliki kunci di lokasi standar (seperti dalam pertanyaan), mereka akan digunakan terlepas dari apakah konfigurasi ada atau tidak. Saya akan menggunakan salah satu metode yang disebutkan dalam jawaban pertama.
Jakuje
Tidak sepenuhnya benar, saya hanya mengujinya di Lubuntu 14.04 saya dan meskipun saya memiliki kunci saya di lokasi standar ~/.ssh/config, kunci tidak digunakan jika saya tentukan -F /dev/null. ssh -voutput membantu dalam kasus ini, itu jelas menunjukkan bahwa karena saya memiliki entri catch-all dalam konfigurasi ssh saya *, itu memilih untuk menggunakan kunci publik daripada menghormati opsi yang dilewatkan melalui -osaklar seperti pada jawaban sebelumnya.
adeelx
1
Lokasi standar ~/.ssh/id_rsaseperti yang dinyatakan dalam halaman buku panduan. Jalur ini di-hardcode pada klien. Pastikan Anda memberikan pengguna yang benar saat pengujian.
Jakuje
4

Saya mencoba beberapa jawaban ini, tetapi ssh -vterus menunjukkan kunci publik saya dikeluarkan dari direktori rumah saya. Namun, menentukan file identitas palsu melakukan trik untuk saya:

ssh -i /dev/null host

Saya harus melakukan ini secara permanen (untuk bekerja di sekitar server SSH yang rusak di APU rak-mount APC - tinggal jauh dari hal-hal ini jika Anda peduli dengan keamanan - jadi saya akhirnya menempatkan opsi ke file konfigurasi saya:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null
miken32
sumber
2

@scoopr dan @Halil Özgür jawaban tidak berhasil untuk saya.

Ini bekerja untuk saya:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

Sumber: http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

shrx
sumber
13
Pertanyaannya adalah tentang otentikasi klien dengan kata sandi. Jawaban ini adalah tentang memeriksa apakah kunci host server cocok dengan yang ada di host yang dikenal. Akibatnya itu menjawab pertanyaan yang berbeda
Anigel
2

Dan juga pastikan, tidak ada yang BatchMode=yesaktif di .ssh / config. Kalau tidak, Anda tidak punya kesempatan, untuk mendapatkan prompt kata sandi interaktif.

Gunnar Tiedt
sumber
0

Saya mungkin satu-satunya di dunia dengan masalah ini, tapi saya punya sshdari sistem operasi lain yang sedang berjalan (choco ssh di Windows dalam shell cygwin) dilihat melaluiwhich ssh

Jadi solusinya adalah

 /usr/bin/ssh [email protected]

Perhatikan path lengkapnya. Saya melakukan ini setelah saya laricyg-get openssh

Jonathan
sumber