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?


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


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"

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.