Запускать скрипты автоматически на сервере после подключения по 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

Requist
источник
Спасибо за ответ. Не могли бы вы привести пример команды
Энтузиаст
но принудительно ли команда выполнить команду на сервере (логин администратора) или в логине клиента? Я хочу выполнить команду при входе на сервер
Энтузиаст
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"
LEUCOS
источник
1

Для выполнения скрипта во время входа в систему добавьте его как вызов из скрипта / etc / profile. Это выполняется для каждого входа в систему, а не только для входа в систему SSH.

Уильям Пекхэм
источник
Я беспокоюсь только о клиентских системах, подключенных с использованием ssh-соединения
Enthusiast
1
Это не всегда будет работать, если у пользователей разные оболочки, а не у всех оболочек источник / etc / profile.
bschlueter