Saya menggunakan Ubuntu 14.04.1 (dengan OpenSSH 6.6 dan libpam-google-authenticator 20130529-2).
Saya mencoba menyiapkan login SSH di mana kunci publik mengotentikasi (tanpa kata sandi) dan pengguna diminta untuk kode dari Google Authenticator.
Mengikuti / mengadaptasi instruksi ini telah memberi saya prompt kata sandi serta prompt Google Auth:
- https://scottlinux.com/2013/06/02/use-google-authenticator-for-two-factor-ssh-authentication-in-linux/
- http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/
- https://wiki.archlinux.org/index.php/Google_Authenticator dan https://wiki.archlinux.org/index.php/SSH_keys#Two-factor_authentication_and_public_keys
- https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-two-factor-authentication
Saya telah menginstal paket, mengedit file /etc/ssh/sshd_config
dan saya/etc/pam.d/ssh
Dalam /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
dan di bagian bawah /etc/pam.d/ssh
:
auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")
Saya tahu PAM tergantung pesanan, tetapi sshd_config
juga?
Apa yang saya lakukan salah? Bantuan apa pun akan dihargai.
PasswordAuthentication no
, tetapi bukan itu. Masalahnya adalah apakah saya memiliki / memilikiControlMaster auto
danControlPath
arahan dalam file ~ / .ssh / config saya. Saya ingin memastikan saya tidak mengunci diri, jadi saya akan selalu membiarkan sesi SSH terbuka. Karena komputer saya hanya akan menggunakan kembali, saya selalu masuk tanpa sistem meminta token. Saya menandai jawaban Anda sebagai benar, karena seseorang yang mengikutinya memang akan mendapatkan pengaturan yang berfungsi. Terima kasih!PasswordAuthentication no
,ChallengeResponseAuthentication yes
,AuthenticationMethods publickey,keyboard-interactive
, danUsePAM yes
disshd_config
. Ini memvalidasi kunci saya dan kemudian meminta saya untuk token Google Authenticator saya dan kemudian juga meminta kata sandi saya. Buat saya melakukan ketiganya — tidak bisa melewati mereka. Saya juga sudah mencobaAuthenticationMethods publickey,keyboard-interactive:pam
seperti yang disarankan oleh halaman manual, tetapi itu tidak mengubah apa pun. Ada ide?@include common-auth
garis yang ditunjukkan oleh jawaban. Saya hanya berpikir itu adalah komentar untukpam_google_authenticator
baris di /etc/pam.d/sshd pada awalnya.auth substack password-auth
), tetapi komentar Anda menyelesaikan masalah saya!Saya akhirnya bisa mendapatkan ini bekerja dengan menempatkan
auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok
di atas/etc/pam.d/sshd
.Menurut halaman manual pam.d :
success=done
berarti bahwa jika Google Authenticator keluar, tidak akan ada lagi otentikasi yang dilakukan, artinya tidak ada prompt kata sandi tambahan.default=die
berarti bahwa jika Google Authenticator menolak upaya login, otentikasi akan segera gagal, melompati prompt kata sandi.Jadi
[success=done new_authtok_reqd=done default=die]
adalah semacam campuran antara nilaisufficient
-requisite
nilai kontrol dan , karena kita ingin perilaku dari keduanya: jika sukses, segera berakhir (cukup), dan jika gagal, juga segera berakhir (diperlukan).Perhatikan bahwa
nullok
argumen ke pam_google_authenticator.so berarti bahwa jika~/.google_authenticator
file tidak ditemukan untuk pengguna, otentikasi kunci publik berjalan seperti biasa. Ini berguna jika saya ingin mengunci hanya sebagian dari akun saya dengan 2FA.sumber
Jawaban Linus Kendall harus bekerja pada sistem yang lebih lama, tetapi pada mesin Linux yang lebih baru itu bermasalah; di webserver berbasis lengkung linux saya yang konfigurasi menghasilkan pam meminta kode authenticator dan kata sandi saya setelah menerima kunci ssh saya (yaitu saya perlu semua 3).
Solusi yang lebih sederhana yang mencegah masalah ini dan yang seharusnya bekerja pada setiap sistem adalah mengubah entri
/etc/pam.d/sshd
menjadi:Kemudian untuk melakukan pengeditan yang sama ke `` / etc / ssh / sshd` yang disebutkan Linus:
Itu akan meminta Anda untuk tanda autentikator Anda setelah server menerima kunci publik Anda. Seharusnya tidak meminta kata sandi Anda.
Sebagai catatan tambahan, jika Anda ingin memiliki akun pengguna sftp, Anda mungkin perlu mem-bypass autentikator google untuk membuatnya berfungsi. Berikut ini adalah saran tentang bagaimana melakukannya dengan aman menggunakan sftp jail. Dalam
etc/ssh/sshd_config
:Anda akan perlu untuk membuat hak akses pada / path / ke / ftp / dir akar tulis saja (misalnya
chown root:root /path/to/ftp/dir
,chmod 755 /path/to/ftp/dir
. Semua orang tua di atas direktori yang juga perlu izin aman. Cara saya biasanya melakukan ini adalah dengan membuat direktori chroot/home/shared/user
, menciptakan direktori di sana (misalnya 'data') dan kemudian memasang direktori apa pun yang ingin saya bagikan seperti ini:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data
Jika Anda mengikuti semua langkah itu, Anda akan memiliki kunci publik + login autentikator google untuk pengguna ssh Anda, dan akun sftp yang dilindungi kata sandi fungsional untuk transfer data.
sumber