Вопрос: Попытка получить SSH с открытым ключом (без пароля) + аутентификатор google, работающий на Ubuntu 14.04.1


Я использую Ubuntu 14.04.1 (с OpenSSH 6.6 и libpam-google-authenticator 20130529-2).

Я пытаюсь настроить учетные записи SSH, где аутентифицируется открытый ключ (без пароля), и пользователю предлагается ввести код из Аутентификатора Google.

Следуя / адаптируя эти инструкции, я получил приглашение пароля, а также приглашение Google Auth:

Я установил пакет, отредактировал мой /etc/ssh/sshd_config а также /etc/pam.d/ssh файлы

В /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

и внизу /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")

Я знаю, что PAM зависит от порядка, но sshd_config также?

Что я делаю не так? Любая помощь будет оценена по достоинству.


18
2017-09-19 15:42


Источник




Ответы:


Получили это хорошо, сначала сделали:

apt-get install libpam-google-authenticator

В /etc/pam.d/sshd Я изменил / добавил следующие строки (вверху):

# @include common-auth
auth required pam_google_authenticator.so

И в /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Хорошо работает, и теперь я получаю приглашение «Проверка кода» после аутентификации с помощью открытого ключа. Я не уверен, как разрешить аутентификацию с помощью пароля + токена или ключа + токена, так как теперь я эффективно удалил метод проверки пароля из PAM.

Использование Ubuntu 14.04.1 LTS (GNU / Linux 3.8.0-19-generic x86_64) с помощью ssh -v: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 января 2014 г.


26
2017-09-29 19:19



Итак, ради потомства, я понял свою проблему. Я тоже пробовал PasswordAuthentication no, но это не так. Проблема в том, что я / имел ControlMaster auto а также ControlPath директив в файле ~ / .ssh / config. Я хотел убедиться, что я не закрыл себя, поэтому я всегда оставил сессию SSH открытой. Поскольку мой компьютер просто использовал их повторно, я всегда попадал без системы, требующей токена. Я правильно ответил на ваш ответ, так как кто-то после этого действительно получит рабочую настройку. Благодаря! - JT.
Я использую CentOS 7. У меня есть PasswordAuthentication no, ChallengeResponseAuthentication yes, AuthenticationMethods publickey,keyboard-interactive, а также UsePAM yes в sshd_config, Он проверяет мой ключ а потом запрашивает у меня токен Google Authenticator а затем также спрашивает у меня мой пароль. Заставляет меня делать все три - не пропускать ни одного из них. Я тоже пробовал AuthenticationMethods publickey,keyboard-interactive:pam как это было предложено на странице руководства, но это ничего не изменило. Есть идеи? - Nick Williams
@NickWilliams У меня была такая же проблема. Что для меня было исправлено, так это то, что мне нужно было похвалить @include common-auth что ответы показывают. Я просто подумал, что это комментарий для pam_google_authenticator сначала в /etc/pam.d/sshd. - freb
Спасибо! Мое решение было не совсем таким (мне нужно было прокомментировать auth substack password-auth), но ваш комментарий решил мою проблему! - Nick Williams
sysconfig.org.uk/two-factor-authentication-with-ssh.html - Christian


Я, наконец, смог получить эту работу, поставив auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok на вершине /etc/pam.d/sshd,

Согласно Страница пользователя pam.d:

  • success=done означает, что, если Google Authenticator выйдет наружу, больше не будет выполняться аутентификация, что означает отсутствие дополнительной подсказки пароля.
  • default=die означает, что, если Google Authenticator отклонит попытку входа в систему, аутентификация немедленно завершится неудачей, пропустив приглашение пароля.

Так [success=done new_authtok_reqd=done default=die] это своего рода смесь между sufficient а также requisite контрольные значения, так как мы хотим поведения от обоих: если успех, немедленно прекратить (достаточный) и если сбой, также немедленно прекратить (требуется).

Обратите внимание, что nullok аргумент pam_google_authenticator.so означает, что если ~/.google_authenticator файл не найден для пользователя, аутентификация с открытым ключом выполняется как обычно. Это полезно, если я хочу заблокировать только часть моих учетных записей с помощью 2FA.


7
2018-02-09 01:07





Ответ Линуса Кендалла должен работать на более старых системах, но на более новых машинах Linux это проблематично; на моем веб-сервере на основе arch linux, в результате которого конфигурация приводит к тому, что pam запрашивает мой код аутентификации и мой пароль после получения моего ключа ssh (т. е. мне нужно все 3).

Более простое решение, которое предотвращает эту проблему и которое должно работать в каждой системе, - это изменить запись в /etc/pam.d/sshdчтобы:

auth sufficient pam_google_authenticator.so

И затем, чтобы сделать те же изменения в `` / etc / ssh / sshd, о которых упоминал Линус:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Это должно спросить вас о токене аутентификации после того, как сервер примет ваш открытый ключ. Он не должен запрашивать ваш пароль.

В качестве побочного примечания, если вы хотите иметь учетную запись sftp, вам, вероятно, придется обойти аутентификатор Google, чтобы заставить его работать. Вот пример того, как сделать это безопасно, используя тюрьму sftp. В etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

Вам нужно будет разрешить только права на / path / to / ftp / dir root (например, chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dir, Все родители над этим каталогом также нуждаются в защищенных разрешениях. Как обычно я делаю это, создавая каталог chroot /home/shared/user, создавая там директорию (например, «данные»), а затем монтируя любую директорию, которую я хочу передать следующим образом: sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

Если вы выполните все эти шаги, у вас будет открытый ключ + аутентификатор google для ваших пользователей ssh ​​и функциональная защищенная паролем учетная запись sftp для передачи данных.


6
2017-12-04 20:24



Это отлично работает. И поскольку по какой-то причине я просто не чувствую себя комфортно, комментируя common-auth, это было более идеальным, чем решение Linus. - Luke Sapan
Большое спасибо! потратил впустую ночную отладку ssh, задаваясь вопросом, почему я все еще должен набирать пароль после pubkey + authcode ...... - felix021