Führen Sie Skripte nach der SSH-Verbindung automatisch auf dem Server aus

11

So führen Sie ein Skript automatisch auf dem Server aus, kurz nachdem das Client-System eine SSH-Verbindung zum Server hergestellt hat

Beispiel: Angenommen, ein Benutzer meldet sich von einem anderen System (über LAN verbunden) über eine SSH-Verbindung bei meinem Computer an. Zu diesem Zeitpunkt sollte ein Skript (Python oder Shell) automatisch in meinem System ausgeführt werden, um eine Validierung durchzuführen.

Wie führe ich das Skript automatisch im Serversystem aus?

Enthusiast
quelle
1
Mögliches Duplikat des Run (System)
-Skripts

Antworten:

14

Sie können dies tun, indem Sie der Konfigurationsdatei den folgenden Parameter hinzufügen (/ 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.

Eine andere Möglichkeit besteht darin, die .ssh / rc-Dateien pro Benutzer zu verwenden.

Um die ForceCommand-Methode zu verwenden, fügen Sie sie einfach ForceCommand /usr/bin/ownscriptam Ende der Datei /etc/ssh/sshd_config(auf dem Server) hinzu.

Das Skript sieht folgendermaßen aus:

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

Vergessen Sie nicht, das Skript zu ändern sudo chmod +x /usr/bin/ownscript

Requist
quelle
Danke für die Antwort. Könnten Sie bitte einen Beispielbefehl geben
Enthusiast
Aber ob der Befehl force den Befehl im Server (Administrator-Login) oder im Client-Login ausführt? Ich möchte Befehl in Server-Login ausführen
Enthusiast
1
Der Befehl wird auf dem Server ausgegeben. Fügen Sie einfach ForceCommand /path/command.script am Ende Ihrer Konfiguration hinzu, um den Trick auszuführen. Ich habe jedoch festgestellt, dass nur dieser Befehl ausgeführt wird, sodass Sie eine Shell in Ihrer Skriptdatei starten müssen. Zur besseren Lesbarkeit werde ich meiner ursprünglichen Antwort ein Beispiel hinzufügen.
Requist
Danke. Kann ich Python-Skript anstelle von Shell-Skript ausführen?
Enthusiast
Angenommen, ich führe meinen benutzerdefinierten Befehl aus. Gibt es eine Möglichkeit, die IP-Adresse und den Anmeldenamen des Benutzers abzurufen (ich möchte wissen, aufgrund welcher Anmeldung mein Befehl ausgeführt wurde?
Enthusiast
3

Sie können eine /etc/ssh/sshrcDatei erstellen . Siehe man 8 ssh. Wenn Sie dies für einen einzelnen Benutzer wünschen, verwenden Sie ~/.ssh/rc.

Hier ist ein Beispiel /etc/ssh/sshrc, das Sie über dbus benachrichtigt, wenn sich jemand an Ihrem Computer anmeldet. Vergiss nicht 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"
Leukos
quelle
1

Um ein Skript während der Anmeldung auszuführen, fügen Sie es als Aufruf aus dem Skript / etc / profile hinzu. Dies wird für jede Anmeldung ausgeführt, nicht nur für SSH-Anmeldungen.

William Peckham
quelle
Ich mache mir nur Sorgen um Clientsysteme, die über eine SSH-Verbindung verbunden sind
Enthusiast
1
Dies funktioniert nicht durchgehend, wenn Benutzer unterschiedliche Shells haben, da nicht alle Shells die Quelle / etc / profile haben.
bschlueter