SSH MOTD на користувача


17

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

Відповіді:


38

Ви не вказали, який 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)


Привіт всім дякую за відповідь, я отримав рішення, будь ласка, виправте мене, якщо я помиляюся. Я додаю ці рядки до / etc / file profile. PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} перед додаванням цього рядка я створюю банерний файл для кожного користувача в каталозі / etc. і файли, такі як motd.root та motd.alex, і ця робота для мене.
user260277

Це теж має зробити. За винятком моєї відповіді, це працює лише в інтерактивному терміналі. Він не працює для SFTP та подібних.
Мартін Прикрил

інтерактивний термінальний засіб?
user260277

Це термінал, з яким взаємодіє людина (на відміну від сеансу SFTP, сеансу SCP або неінтерактивного терміналу, який використовується для віддаленого виконання певного пакетного завдання)
Мартін Прикрил

Я включив кілька складних деталей щодо користувацької реалізації банера.
Мартін Прикрил

9

Ви також можете використовувати "$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 для кожного користувача.


привіт, я спробую це, але воно дає повідомлення про помилку .ssh / rc: 1: .ssh / rc: welcome: не знайдено.
user260277

я був винен, я робив помилку, вам потрібно відлуння, як у звичайному скрипті bash
c4f4t0r

"Wolrd" - також друкарська помилка :)
simon

Я отримую "stty: стандартний ввід: Невідповідний ioctl для пристрою".
Призупинено до подальшого повідомлення.

що ти маєш у .ssh / rc?
c4f4t0r
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.