Вопрос или проблема
Я следовал https://ubuntu.com/tutorials/configure-ssh-2fa, чтобы настроить защиту 2FA для SSH в моей системе Ubuntu 22.04.5. У меня включена только аутентификация на основе ключей, поэтому это может быть избыточным, но так считается более безопасным, что даже если каким-то образом мой приватный ключ окажется в свободном доступе, его недостаточно будет для доступа.
Я не хочу вводить код TOTP при подключении с системы в моей локальной сети, поэтому мой /etc/pam.d/sshd
выглядит так:
auth [success=done default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth required pam_google_authenticator.so
/etc/security/access-local.conf
содержит:
+ : ALL : 192.168.1.0/24
+ : ALL : LOCAL
- : ALL : ALL
Все это работает хорошо. Я запрашиваю код TOTP, когда нахожусь вне своей локальной сети, и не запрашиваю его, когда нахожусь в ней.
Теперь моя проблема в том, что автозаполнение с scp
больше не работает. Например, на другой системе я пробую:
$ scp server:someth<TAB>
и something
должен автозаполниться, если этот файл существует. Это работает нормально, когда у меня не включен модуль PAM, но не работает, когда он включен. Даже в случае, когда я нахожусь в своей локальной сети и не получаю запроса на ввод кода TOTP, это не работает. Когда я нажимаю TAB, я получаю сообщения вроде этого в /var/log/auth.log
сервера:
Oct 26 17:08:13 server sshd[1136620]: Connection closed by authenticating user user 192.168.1.182 port 53145 [preauth]
Oct 26 17:08:13 server sshd[1136732]: Connection closed by authenticating user user 192.168.1.182 port 53146 [preauth]
Сообщения всегда появляются парами для каждого нажатия TAB.
Кто-нибудь знает, что я могу сделать, чтобы это заработало?
Ответ или решение
Проблема с автозаполнением (tab completion) при использовании scp
в контексте двухфакторной аутентификации (2FA) через PAM (Pluggable Authentication Module) на вашем сервере Ubuntu 22.04.5 может быть довольно склонна к путанице. Давайте подробно разберёмся в этом вопросе, чтобы вы могли снова пользоваться функцией автозаполнения, одновременно сохраняя уровень безопасности, который вы настроили.
Проблема: Автозаполнение не работает
Когда вы используете scp
с включенной двухфакторной аутентификацией, иногда происходит ситуация, когда SSH пытается аутентифицировать соединение, и модуль pam_google_authenticator.so
блокирует процесс, что приводит к закрытию соединения, как это видно в логах /var/log/auth.log
.
Возможные причины
- Проблемы с PAM: Модуль PAM для 2FA может требовать полной аутентификации перед выполнением любой команды, включая автозаполнение.
- Предварительная аутентификация: Табуляция в
scp
вызывает несколько предварительных соединений SSH для получения информации о файлах на удалённой машине, что может приводить к ошибкам аутентификации, если настройки PAM не позволяют этим попыткам проходить без полной аутентификации.
Рекомендации по решению проблемы
1. Изменение конфигурации PAM
Вы можете попробовать изменить порядок аутентификации в вашем /etc/pam.d/sshd
. Например, можно добавить условие, которое отключит двухфакторную аутентификацию для локальных IP-адресов:
auth [success=done default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth required pam_google_authenticator.so nullok
- Ключевое слово
nullok
разрешает проходить аутентификацию без TOTP, если она недоступна, что может помочь для автоматизации.
2. Настройка SSH
Чтобы scp
мог корректно выполнять автозаполнение, убедитесь, что SSH настроен правильно:
- Проверьте настройки в
/etc/ssh/sshd_config
, убедитесь, что параметрыPermitRootLogin
иPasswordAuthentication
установлены в нужные значения. - Также важно проверить секцию
Match
в конфигурации SSH, чтобы убедиться, что доступ с локальной сети не блокируется.
3. Логи и отладка
Вернитесь к логам системы (/var/log/auth.log
) и посмотрите, есть ли дополнительные ошибки или предупреждения, которые могут дать больше информации о том, что происходит при попытке использования табуляции. Это может помочь вам понять, следует ли пойти другим путём в конфигурации.
4. Альтернативные методы
Если проблема продолжает существовать, рекомендуется рассмотреть использование другого метода для доступа к файлам (например, rsync
с autocompletion) или использовать клиент SSH с другим набором функций.
Заключение
Хотя двухфакторная аутентификация — это хороший способ усилить безопасность вашего сервера, она может приводить к подобным проблемам с автозаполнением в scp
. Надеюсь, предложенные рекомендации помогут вам исправить эту ситуацию, не снижая уровень безопасности вашей системы. Если вопросы останутся, не стесняйтесь обращаться за дополнительной помощью!