Запуск сценаріїв автоматично на сервері після з'єднання ssh


11

як автоматично запустити скрипт на сервері незабаром після того, як клієнтська система встановить ssh-з'єднання з сервером

Наприклад: припустимо, користувач увійде на мій комп'ютер з іншої системи (підключений через lan) за допомогою ssh-з'єднання. У той час сценарій (python або shell) повинен автоматично запускатися в моїй системі, щоб виконати деяку перевірку?

Як запустити скрипт автоматично в серверній системі?


Відповіді:


14

Це можна зробити, додавши наступний параметр у ваш конфігураційний файл (/ etc / ssh / sshd_config).

 ForceCommand
         Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell
         with the -c option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the
         SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with
         ChrootDirectory.

Інший варіант - використовувати .ssh / rc файли на основі кожного користувача.

Для використання методу ForceCommand просто додайте ForceCommand /usr/bin/ownscriptвнизу файлу /etc/ssh/sshd_config(на сервері).

Сценарій виглядає приблизно так:

#!/bin/bash
#Script file for ssh
#
#put your commands here
echo "test" > /tmp/test.txt
#
#exit by calling a shell to open for the ssh session
/bin/bash

Не забудьте chmod сценарій sudo chmod +x /usr/bin/ownscript


дякую за відповідь. Скажіть, будь ласка, приклад команди
ентузіаст

але чи виконує команда force команду на сервері (адміністратор логін) або у вході клієнта? Я хочу виконати команду при вході в сервер
ентузіаст

1
Команда видається на сервері. Просто додайте ForceCommand /path/command.script у нижній частині конфігурації, це зробить трюк. Однак я зіткнувся, що вона просто виконає цю команду, тому вам потрібно запустити оболонку у вашому скриптовому файлі. Для кращої читабельності я додам приклад до своєї оригінальної відповіді.
Реквізити

Дякую. Чи можу я запустити скрипт python замість оболонки?
Ентузіаст

припустимо, я виконую свою власну команду. Чи є спосіб отримати IP-адресу та ім’я користувача для входу (я хочу знати, через який логін виконується моя команда?
Ентузіаст

4

Ви можете створити /etc/ssh/sshrcфайл. Див man 8 ssh. Якщо ви хочете цього для одного користувача, використовуйте ~/.ssh/rc.

Ось зразок, /etc/ssh/sshrcякий повідомляє вас через dbus, коли хтось увійде на вашу машину. Не забудьте chmod +x:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

notify-send -u CRITICAL "SSH connection from ${ip}" "User $USER just logged in from $ip"

1

Для виконання сценарію під час входу додайте його як дзвінок із сценарію / etc / profile. Це виконується для кожного входу в систему, не тільки для логотипів ssh.


Мене турбують лише клієнтські системи, підключені за допомогою ssh-з'єднання
Ентузіаст

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