Я хочу відобразити банер (привітальне повідомлення) для користувачів SSH із певним вітальним повідомленням для кожного користувача.
Я хочу відобразити банер (привітальне повідомлення) для користувачів 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 для кожного користувача.
groups|awk '{print $1}'
cat /etc/motd.${PGROUP} перед додаванням цього рядка я створюю банерний файл для кожного користувача в каталозі / etc. і файли, такі як motd.root та motd.alex, і ця робота для мене.