Uruchamiaj skrypty automatycznie na serwerze po połączeniu ssh

11

jak uruchomić skrypt automatycznie na serwerze wkrótce po ustanowieniu połączenia ssh z serwerem przez system klienta

na przykład: załóżmy, że użytkownik zaloguje się do mojego komputera z innego systemu (podłączonego przez LAN) za pomocą połączenia ssh. Czy w tym momencie skrypt (python lub powłoka) powinien zostać uruchomiony automatycznie w moim systemie, aby przeprowadzić weryfikację?

Jak uruchomić skrypt automatycznie w systemie serwera?

Entuzjasta
źródło

Odpowiedzi:

14

Możesz to zrobić, dodając następujący parametr do pliku konfiguracyjnego (/ 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.

Inną opcją jest użycie plików .ssh / rc dla poszczególnych użytkowników.

Aby użyć metody ForceCommand, wystarczy dodać ForceCommand /usr/bin/ownscriptna dole pliku /etc/ssh/sshd_config(na serwerze).

Skrypt wygląda następująco:

#!/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

Nie zapomnij przeskoczyć skryptu sudo chmod +x /usr/bin/ownscript

Wymagać
źródło
Dziękuję za odpowiedź. Czy możesz podać przykładowe polecenie
Entuzjasta
ale czy polecenie wymusza wykonanie polecenia na serwerze (login administratora) czy na koncie klienta? Chcę wykonać polecenie przy logowaniu do serwera
Entuzjasta
1
Polecenie zostało wydane na serwerze. Wystarczy dodać ForceCommand /path/command.script na dole konfiguracji, aby załatwić sprawę. Jednak napotkałem, że po prostu wykona to polecenie, więc musisz uruchomić powłokę w swoim pliku skryptowym. Dla lepszej czytelności dodam przykład do mojej oryginalnej odpowiedzi.
Wymagaj
Dziękuję Ci. czy mogę uruchomić skrypt Pythona zamiast skryptu powłoki?
Entuzjasta
przypuśćmy, że wykonuję moje niestandardowe polecenie. Czy jest jakiś sposób na odzyskanie adresu IP i nazwy użytkownika (chcę wiedzieć, z powodu którego loginu moje polecenie zostało wykonane?
Entuzjasta
4

Możesz utworzyć /etc/ssh/sshrcplik. Zobaczyć man 8 ssh. Jeśli chcesz tego dla jednego użytkownika, użyj ~/.ssh/rc.

Oto próbka /etc/ssh/sshrc, która powiadomi Cię przez dbus, gdy ktoś zaloguje się na twoim komputerze. Nie zapomnij 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
źródło
1

Aby wykonać skrypt podczas logowania, dodaj go jako wywołanie ze skryptu / etc / profile. Jest to wykonywane przy każdym logowaniu, nie tylko przy logowaniu ssh.

William Peckham
źródło
Martwię się tylko o systemy klienckie podłączone za pomocą połączenia ssh
Enthusiast
1
Nie będzie to konsekwentnie działać, jeśli użytkownicy mają różne powłoki, ponieważ nie wszystkie powłoki źródłowe / etc / profile.
bschlueter