SSH MOTD на пользователя

Я хочу отобразить баннер (желанное сообщение) для пользователей SSH с определенным желанным сообщением для каждого пользователя.

17
задан 18 December 2014 в 18:56
2 ответа

Вы не указали, какой SSH-сервер используете. Я предполагаю OpenSSH.

Обратите внимание, что баннер SSH и MOTD - это две разные вещи.

Хотя они почти неотличимы от SSH-терминала, они имеют другое поведение, например, в SFTP-клиенте.


MOTD - это просто текст, напечатанный на интерактивном терминале. Таким образом, он не будет (и не может) быть отправлен, например, клиентам SFTP (подробнее об этом позже).

MOTD жестко запрограммирован в / etc / motd в OpenSSH. Вы можете включить / выключить его только глобально с помощью директивы PrintMotd .

В некоторых системах Linux, однако, PrintMotd всегда выключен, а MOTD распечатывается PAM стек (используя модуль pam_motd ). В этом случае вы можете отключить его через /etc/pam.d/sshd или указать собственный путь motd = в качестве параметра модуля.


Баннер SSH - это специальная функция SSH 2.0, отправляемая в определенном пакете SSH (SSH2_MSG_USERAUTH_BANNER).

Таким образом, даже нетерминальные клиенты, такие как клиенты SFTP, могут обрабатывать его и отображать для пользователя. Посмотрите, как баннер отображается в WinSCP SFTP / SCP клиенте , например.

Баннер SSH настраивается для каждого пользователя (или группы, или других критериев) в sshd_config с помощью ] Banner и директивы Match :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

См. Также Отключить баннер ssh для определенных пользователей или IPS .


Конечно, вы также можете использовать кастомная реализация сообщения / баннера. Просто распечатайте сообщение, выбранное с использованием вашей пользовательской логики из сценария глобального профиля.

Как и в случае с MOTD, это не будет работать для неинтерактивных сеансов (SFTP и т.п.).

Что еще более важно, выиграл не только он. не работает, вам нужно убедиться , что вы печатаете сообщение только для интерактивного терминала. Что OpenSSH делает автоматически для / etc / motd . Либо используйте сценарий глобального профиля, который выполняется только для интерактивного терминала, либо распечатайте сообщение условно на основе значения переменной среды TERM .

Если вы распечатаете сообщение для неинтерактивного сеанса, вы прервете любой клиент, который использует строгий протокол, такой как SFTP или SCP, поскольку клиент будет пытаться интерпретировать ваше текстовое сообщение как сообщение протокола, но безуспешно.

См., например, описание такой проблемы в документации по Клиент WinSCP SFTP / SCP .

(я являюсь автором WinSCP)

38
ответ дан 2 December 2019 в 20:27

Вы можете использовать "$ HOME / .ssh / rc" для архивации того, что вы хотите сделать

echo "echo Hello World" > /home/pluto/.ssh/rc
ssh pluto@localhost
Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain
Hello World

Таким образом, у вас может быть один ssh rc для каждого пользователя.

9
ответ дан 2 December 2019 в 20:27

Теги

Похожие вопросы