Существует ForceCommand
вариант в sshd_config
:
ForceCommand
Принудительно выполняет команду, указанную ForceCommand
, игнорируя любую команду, предоставленную клиентом, и ~/.ssh/rc
если присутствует. Команда вызывается с использованием оболочки входа пользователя с параметром -c
. Это относится к выполнению оболочки, команды или подсистемы. Это наиболее полезно внутри блока Match. Команда, изначально предоставленная клиентом, доступна в переменной среды SSH_ORIGINAL_COMMAND
. […] По умолчанию нет.
Он говорит , что «команда вызывается с помощью входа пользователя оболочки с опцией -c
так что вам нужно exec
еще один инструмент, а не просто запустить его:
ForceCommand exec top
Таким образом, оболочка входа пользователя будет сразу же заменена на top
, оболочки больше не будет. Выход из инструмента разорвет соединение.
Заметки:
Это влияет на вход в систему только через SSH, пользователь все еще может войти в систему локально и получить оболочку (если этот метод не был намеренно отключен другими средствами). Вы говорите о доступе по SSH, а не о общем доступе, поэтому я предполагаю, что это то, что вам нужно.
Ваш вопрос начинается с «Как это обычно решается…». Я понятия не имею, если это, как это обычно решается, все, что я знаю, - это возможный путь.
Чтобы повлиять на одного пользователя, вам нужен условный блок, например:
Match User spectator
ForceCommand exec top
Некоторые инструменты позволяют пользователям запускать произвольные команды и в любом случае получать оболочку. (Я даже не уверен, что top
в этом вопросе безопасен, рассмотрим это как пример).