Я хочу відобразити банер (привітальне повідомлення) для користувачів SSH із певним вітальним повідомленням для кожного користувача.
Я хочу відобразити банер (привітальне повідомлення) для користувачів SSH із певним вітальним повідомленням для кожного користувача.
Відповіді:
Ви не вказали, який SSH-сервер ви використовуєте. Я припускаю, що OpenSSH.
Зауважте, що банер SSH та MOTD - це дві різні речі.
Хоча вони майже не відрізняються від SSH-терміналу, вони мають іншу поведінку, наприклад, у клієнта SFTP.
MOTD - це лише текст, надрукований на інтерактивному терміналі. Так, наприклад, він не буде (і не може) надсилатися клієнтам SFTP (детальніше про це пізніше).
MOTD жорстко кодується до /etc/motdOpenSSH. Ви можете увімкнути / вимкнути лише глобально, використовуючи 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, і ця робота для мене.