Давно хотел так сделать, но все было как-то лень. Да и иногда боязно, случайно потерять доступ по ssh, особенно если это удаленный сервер. Решился. Сделал.

Ничего сложного нет. Ставим пакет libpam-google-authenticator, потом запускаем приложение google-authenticator под нужным пользователем. После несложных ответов на вопросы, получаем QR код, который сканируем в приложении.

Потом я подумал, какой смысл закрывать из локальной сети ssh, вводить каждый раз код не хочется. Поэтому я создал отдельного пользователя, установил на него двухфакторную аутентификацию и только этому пользователю разрешил заходить по ssh:

Добавляем в файлик /etc/ssh/sshd_config строчку:

AllowUsers remote_ssh_user

Теперь попасть по ssh сможет только этот пользователь. А дальше добавляем еще пару строчек:

Match address 192.168.1.0/24
AllowUsers lan_ssh_user

Теперь можно ходить под основным пользователем только из локальной сети, а если нужно снаружи, то через аутентификатор.