Führe (System-) Skript bei SSH-Anmeldung und / oder -Abmeldung aus

12

Ich möchte, dass mein OpenSSH-Server jedes Mal ein Skript startet, wenn sich ein Benutzer mit SSH anmeldet und idealerweise den Hostnamen oder die IP-Adresse sowie den Benutzernamen übermittelt. Außerdem möchte ich, dass jedes Mal ein Skript ausgeführt wird, wenn eine Sitzung beendet wird (Übergabe des Benutzernamens). Diese Skripts sollten nicht in der Benutzersitzung, sondern systemweit ausgeführt werden.

Die Idee besteht darin, beim An- und Abmelden eine Audiowarnung zu geben, z.B. mit espeak , und um die Informationen auf einem externen Display anzuzeigen.

Ich habe gesehen, dass es ein pam-scripts -Paket gibt, aber ich bin mir nicht sicher, ob das tut, was ich will, oder wie ich es benutze.

    
sunside 29.10.2010, 20:02
quelle

4 Antworten

9

Sie können einen Befehl an Ihre SSH-Benutzer erzwingen anstatt an den von ihnen angeforderten (oder an ihre Shell, wenn sie keinen bestimmten Befehl geben). Dies kann durch Angabe des Befehls mit ForceCommand /root/ssh-wrapper in /etc/ssh/sshd_config erfolgen (egal wo das Skript steht oder wie es heißt, stellen Sie sicher, dass es von allen Benutzern ausgeführt werden kann und auf die sshd-Konfigurationsdatei verweist) es). Sie müssen auch sshd neu starten / neu laden. Auf den ursprünglichen Befehl kann der erzwungene Befehl als $SSH_ORIGINAL_COMMAND zugreifen.

Ich habe gerade dieses Skript zusammengehackt:

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip='echo $SSH_CONNECTION | cut -d " " -f 1'

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

Jedes Mal, wenn ich mich anmelde oder abmelde, sagt mir eine Stimme, und ein Protokolleintrag wird in syslog geschrieben. Es protokolliert auch den Befehl. Sie können etwas wie das Folgende verwenden, um Ihrer sshd-Verwendung zu folgen:

tailf /var/log/syslog | grep ssh-wrapper

Bitte beachten Sie, dass dieses Skript größtenteils nicht getestet wird. Verwenden Sie es auf eigene Gefahr! ; -)

PS: Denken Sie daran, dass dieses Skript als angemeldeter Benutzer ausgeführt wird, sodass Sie nicht alles tun können, wenn Sie es ändern, um weitere Funktionen hinzuzufügen ...

    
JanC 30.10.2010, 05:55
quelle
1

Ich habe diese übereinstimmenden Ereignisse zuvor in der Protokolldatei gesehen (was Ihnen Flexibilität bei der Zuordnung von irgendetwas ermöglichen würde). Diese Seite ist schlecht formatiert, könnte Ihnen aber beim Einstieg helfen: verlinken mit esound

    
kanaka 29.10.2010 20:47
quelle
0

(Antwort aus der gleichen Frage auf ServerFault )

Schreiben Sie einfach ein Skript, um zu tun, was Sie wollen, und kleben Sie es dann in /etc/profile oder möglicherweise /etc/bash.bashrc , je nach Ihren Bedürfnissen. Änderungen an diesen Dateien gelten für alle Benutzer. Ich bin mir nicht sicher, wie Sie sich bei dieser Vorgehensweise bei der Abmeldung melden würden.

Alternativ dazu können Sie auch einen einfachen Daemon verwenden, der /var/log/auth auf neue (und schließende) SSH-Sitzungen überwacht. Auf diese Weise wäre es in der Lage, Benachrichtigungen sowohl beim Anmelden als auch beim Abmelden zu senden.

    
EEAA 29.10.2010 20:54
quelle
0

Sie können den sshrc (man sshd, suchen Sie nach sshrc)

verwenden

ssh führt die Datei / etc / ssh / sshrc aus, wenn sie existiert, und Sie können von dort aus ein Skript ausführen (oder mehrere Skripts aufrufen)

Sie können jede beliebige Bash-Variable aufrufen, zB $USER , oder die IP-Adresse über

beziehen
read -d " " ip <<< $SSH_CONNECTION

Sie können ein Skript schreiben, um zu testen oder zu protokollieren, was immer Sie wollen.

Logout-Skript ... nun, das ist es wonach ich suche! : D

    
higuita 06.06.2016 20:53
quelle

Tags und Links