Назад | Перейти на главную страницу

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

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

Вы не указали, какой 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)

Ты можешь использовать "$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 для каждого пользователя.