it-swarm-id.com

Kemungkinan untuk menggunakan kunci pribadi dan otentikasi kata sandi untuk login ssh?

Tampaknya mereka saling eksklusif, karena melumpuhkan yang satu memberi saya yang lain, dan sebaliknya. Auth dua faktor untuk server ssh saya terdengar sangat bagus, jadi apakah ada cara untuk melakukannya?

56
chrisdotcode

Dengan rilis Fedora dan RHEL 6 baru-baru ini, Anda dapat menggunakan RequiredAuthentications2 pubkey,password untuk meminta otentikasi kata sandi pubkey dan . Biasanya ini dilakukan untuk meminta token dan 2-faktor otentikasi token, bukan kata sandi pengguna.

Pembaruan: Sekarang di RHEL/CentOS 7, dan sistem apa pun dengan versi terbaru OpenSSH, Anda dapat menggunakan:

AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

Juga dimungkinkan untuk menggunakan arahan Match untuk mengecualikan IP atau Pengguna.

48
mricon

Anda dapat memiliki otentikasi kunci publik dan kata sandi pada server yang sama. Jika otentikasi kunci publik gagal, itu akan pergi ke otentikasi kata sandi.

Mengenai membutuhkan keduanya, itu konyol dan kontraproduktif, dan memeriksa man sshd_config tidak ada opsi untuk melakukan ini.

Kunci pribadi ssh Anda harus memiliki frasa sandi yang aman. Jadi, jika seorang penyerang mendapatkan kunci pribadi Anda, mereka masih tidak dapat melakukan apa pun tanpa terlebih dahulu memperoleh kata sandi Anda. Jika mereka telah mengompromikan passphrase itu (kemungkinan besar dengan keylogger; atau dari brute yang memaksakan passphrase yang sangat lemah) mereka juga dapat secara sepele mengambil/brute memaksa password yang dihafalkan.

Jika Anda benar-benar ingin, Anda mungkin dapat mengatur sesuatu dengan mengatakan ForceCommand (mis., Hanya membolehkan otentikasi kunci publik dan kemudian mengarahkan pengguna ke Shell yang meminta kata sandi). Saya tidak merekomendasikan ini.

Alternatif yang lebih baik jika Anda ingin membatasi paparan, adalah memiliki pengaturan firewall untuk membatasi IP yang dapat mencapai port ssh; mungkin dengan VPN tambahan yang berjalan di server di suatu tempat jika Anda mungkin perlu melakukan tunnel dari komputer lain di beberapa titik. Anda juga dapat menggunakan sesuatu seperti knockd untuk membuka lubang di firewall setelah pola port-knocking tertentu, meskipun mengenali bahwa siapa pun yang menguping lalu lintas dapat memutar ulang pola knocking untuk membuka port.

18
dr jimbob

(lintas posting jawaban SO dengan solusi terbaru untuk hari ini)

Jika Anda membaca halaman manual untuk sshd_config(5), ada opsi AuthenticationMethods, yang mengambil daftar metode yang perlu Anda lewati sebelum Anda diberikan akses. Pengaturan yang Anda butuhkan adalah:

AuthenticationMethods publickey,password

Metode ini harus bekerja dengan semua sistem Linux saat ini dengan openssh terbaru (openssh-6, openssh-7).

Sistem yang lebih tua

Satu-satunya pengecualian yang saya tahu adalah RHEL 6 (openssh-5.3), yang membutuhkan pengaturan opsi yang berbeda dengan nilai yang sama (seperti yang dijelaskan dalam jawaban lain):

RequiredAuthentications2 publickey,password
12
Jakuje

Saya melihat lebih dalam lagi dan menemukan yang berikut.

Anda bisa menggunakan PAM untuk otentikasi dua faktor, tetapi dengan melakukannya Anda tidak akan menggunakan kunci SSH, Anda akan menggunakan dua faktor yang berbeda.

Misalnya, Anda dapat menggunakan google dengan otentikasi dua faktor dan menggunakan pam untuk mengotentikasi, seperti dijelaskan di

http://www.techrepublic.com/blog/opensource/two-factor-ssh-authentication-via-google-secures-linux-logins/2607

4
Phillip Nordwall

Satu-satunya solusi yang bekerja untuk saya adalah memiliki yang mengikuti di/etc/ssh/sshd_config (diuji dengan CentOS7):

PubkeyAuthentication yes 
AuthenticationMethods publickey password
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes 
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes

Yang berarti PAM telah diaktifkan, telah mengaktifkan setiap baris yang menyangkut kunci publik dan, akhirnya, agar AuthenticationMethods mendaftar dengan benar kedua metode. Harap perhatikan bahwa, terlepas dari apa yang ditulis oleh Jakuje , Anda tidak boleh menambahkan koma antara publickey dan kata sandi setelah AuthenticationMethods.

2