Выполнить команду при входе в систему по ssh и выйти из системы по завершении команды

Для меня очень простым решением было вызвать интерактивную оболочку с помощью sudo -s , которая, похоже, работает с моей версией zsh (5.2) в комплекте с macOS. Это дает мне функции из моего ~ / .zshrc .

Из справочной страницы sudo, которая на самом деле не намекает на такое поведение:

-s, --shell
Запустить оболочку, указанную переменной среды SHELL, если она установлена, или оболочка, заданная записью базы данных паролей вызывающего пользователя. Если указана команда , она передается в оболочку для выполнения с помощью параметра -c оболочки. Если команда не указана, выполняется интерактивная оболочка.

Я не уверен, каков ваш вариант использования, но подозреваю, что вы ищете интерактивное решение.

2
10.08.2016, 00:33
1 ответ

Что касается принудительного выполнения команды, sshd имеет параметр ForceCommand :

Принудительное выполнение команды, заданной ForceCommand, игнорируя любую команду, предоставленную клиентом, и ~ / .ssh / rc, если таковой имеется. Команда вызывается с помощью оболочки входа пользователя с параметром -c.
Это относится к выполнению оболочки, команды или подсистемы . Это наиболее полезно внутри блока Match. Команда, изначально предоставленная клиентом , доступна в переменной среды SSH_ORIGINAL_COMMAND.

Итак, прочитав это, если вы установите ForceCommand на скрипт , это должно примерно сделать то, что вы хотите.

Что касается обеспечения безопасности контрольного журнала, одним из решений в многосерверной системе было бы получение информации из системного журнала и отправка записей по сети на другой физический хост. Это в значительной степени препятствует доступу пользователей к журналам после того, как они были сгенерированы. В противном случае вы, вероятно, могли бы настроить что-то, чтобы просто отправлять журналы на другой порт на локальном хосте, где демон собирает и хранит их. (Попробовав очевидное, вы не можете script -f / dev / tcp / localhost / 8888 , поскольку / dev / tcp / ... нужно будет обрабатывать с помощью bash, так что я думаю, вам понадобится mkfifo путь связи, как в примере страницы руководства для script -f )

2
27.01.2020, 22:11

Теги

Похожие вопросы