SSH MOTD на пользователя
Я хочу отобразить баннер (приветственное сообщение) для пользователей SSH с определенным приветственным сообщением для каждого пользователя.
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)
Ты можешь использовать "$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 для каждого пользователя.