OpenSSH :Как запустить команду при подключении по ssh

Терминал Gnome — это приложение X (Приложение с графическим интерфейсом ). Если вы хотите запустить какое-либо X-приложение из cron, просто «дайте ему знать», какой дисплей вы используете, поскольку cronне выполняет команды в вашей обычной среде оболочки.

Прежде всего определите, какой дисплей используется в вашей системе:

echo $DISPLAY

Вывод будет примерно таким:

:0

или

:1

Предположим, что ваша переменная DISPLAYимеет значение :1, затем добавьте в свой сценарий перед командой с помощью переменной DISPLAY=:1приложения с графическим интерфейсом, т. е.:

#!/bin/bash
DISPLAY=:1 gnome-terminal -x sh -c 'zenity --info --text="Msg1" --title="Text1..."  --timeout=10;<some_command>;zenity --info --text="Msg2" --title="Text2..."  --timeout=10;<some_command>;zenity --info --text="Msg3" --title="Reboot..."  --timeout=10;sleep 1; exec bash'

Помимо cronв CentOS есть еще одна возможность запустить что-то однократно при старте системы-rc-localслужебный механизм. Создайте (, если он еще не создан )файл:

/etc/rc.d/rc.local

с содержанием:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/path/to/script.sh

exit 0

Поместите в файл все команды, которые вы хотите выполнять при запуске.

Сделать файл rc.localисполняемым:

chmod +x /etc/rc.d/rc.local

Включите службу rc-localи запустите ее:

systemctl enable rc-local
systemctl start rc-local

Проверьте, правильно ли работает служба:

systemctl status rc-local
0
16.08.2020, 22:06
2 ответа

Да, используйте ForceCommand в конфигурации sshd _. Это хорошо описано на странице руководства для sshd _config :

.

https://linux.die.net/man/5/sshd_config

Чтобы продолжить соединение, вы просто выполняете исходную команду (, хранящуюся в SSH_ORIGINAL_COMMANDenv. переменная )в вашем скрипте-оболочке.

1
18.03.2021, 23:12

Возможно, я вас неправильно понял, но если вы хотите запустить команду в контексте сервера, а не ForceCommand, которая запускается для пользовательского соединения, вы можете использовать установку SSHD с активацией через сокет, которая описана здесь:

http://0pointer.de/blog/projects/socket-activated-containers.html

Если вы хотите запускать скрипты до запуска sshd, используйте несколько операторов ExecStart, где sshd— последний.

2
18.03.2021, 23:12

Теги

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