This is an old revision of the document!
$ sudo apt-get install libpam-google-authenticator
student@debian:~$ man google-authenticator student@debian:~$ google-authenticator student@debian:~$ google-authenticator -t -f -d -w 3 -e 5 -r 3 -R 30 Your new secret key is: NNNNNNNNNNNNNNNNNNNNNNNN Enter code from app (-1 to skip): NNNNNN Code confirmed Your emergency scratch codes are: ... NNNNNNNN
debian:~# cat /etc/pam.d/sshd
... # Enable MFA using Google Authenticator PAM auth required pam_google_authenticator.so #nullok
debian:~# cat /etc/ssh/sshd_config
... KbdInteractiveAuthentication yes ...
debian:~# systemctl reload sshd
debian:~# nft flush ruleset
debian:~# cp /etc/pam.d/login /etc/pam.d/openvpn debian:~# cat /etc/pam.d/openvpn
auth required pam_google_authenticator.so authtok_prompt=pin #auth required pam_google_authenticator.so authtok_prompt=pin user=root secret=/etc/openvpn/google-auth/${USER} ...
# apt install pamtester # pamtester openvpn student authenticate pin Password: pamtester: successfully authenticated
# cat /etc/openvpn/openvpn1.conf
... plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so "openvpn login USERNAME password PASSWORD pin OTP" ...
debian:~# systemctl enable openvpn@openvpn1 --now debian:~# journalctl -f ... Aug 29 09:45:09 debian openvpn(pam_google_authenticator)[2483]: Failed to read "/home/student/.google_authenticator" for "student" ...
# systemctl edit openvpn@openvpn1
[Service] ProtectHome=no