it-swarm.com.de

Führen Sie ein (System-) Skript für die SSH-Anmeldung und / oder -Abmeldung aus

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

Die Idee ist, beim An- und Abmelden eine akustische Warnung abzugeben, z. Verwenden Sie espeak und, um die Informationen auf einem externen Display anzuzeigen.

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

12
sunside

Sie können Ihren SSH-Benutzern einen Befehl aufzwingen, anstatt den Befehl, den sie anfordern (oder deren Shell, wenn sie keinen bestimmten Befehl erteilen). Dies kann erreicht werden, indem Sie diesen Befehl mit etwas wie ForceCommand /root/ssh-wrapper in /etc/ssh/sshd_config angeben (es spielt keine Rolle, wo sich das Skript befindet oder wie es benannt ist, stellen Sie nur sicher, dass es von allen Benutzern ausführbar ist und die sshd-Konfigurationsdatei darauf verweist). Sie müssen auch sshd neu starten/laden. Der ursprüngliche Befehl ist für den erzwungenen Befehl als $SSH_ORIGINAL_COMMAND zugänglich.

Ich habe dieses Skript gerade zusammen gehackt:

#! /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, wird mir dies von einer Stimme mitgeteilt, und ein Protokolleintrag wird in syslog geschrieben. Es protokolliert auch den Befehl. Sie können Folgendes verwenden, um Ihre SSHD-Nutzung zu "verfolgen":

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

Bitte beachten Sie, dass dieses Skript größtenteils ungetestet ist, verwenden Sie es also auf eigenes Risiko! ;-)

PS: Denken Sie daran, dass dieses Skript als der Benutzer ausgeführt wird, der sich angemeldet hat. Sie können also nicht alles tun, was Sie möchten, wenn Sie es ändern, um weitere Funktionen hinzuzufügen ...

10
JanC

Ich habe diese Übereinstimmungsereignisse bereits in der Protokolldatei gesehen (was Ihnen Flexibilität bei der Zuordnung von Elementen ermöglicht). Diese Seite ist schlecht formatiert, kann Ihnen jedoch den Einstieg erleichtern: https://help.ubuntu.com/community/AudibleLogs#Play with esound

1
kanaka

(Antwort von derselben Frage am ServerFault )

Schreiben Sie einfach ein Skript, um zu tun, was Sie wollen, und speichern Sie es dann in /etc/profile oder möglicherweise /etc/bash.bashrc, je nach Ihren Anforderungen. Änderungen an diesen Dateien gelten für alle Benutzer. Ich bin mir jedoch nicht sicher, wie Sie beim Abmelden benachrichtigt werden sollen.

Eine andere Möglichkeit wäre, einen einfachen Daemon zu haben, der /var/log/auth für neue (und schließende) ssh-Sitzungen überwacht. Auf diese Weise können Benachrichtigungen sowohl beim Anmelden als auch beim Abmelden gesendet werden.

0
EEAA

Ich denke, PAM ist die beste Option. Es ist systemweit und kann nicht von den Konfigurationsdateien des Benutzers überschrieben werden.

Sie können diesen Schritten folgen. Sie haben für mich auf Ubuntu 14.04.4 LTS gearbeitet.

Lauf:

$ Sudo pico /opt/custom/bin/info-session.sh

Bearbeiten Sie diese leere Datei und fügen Sie diese Zeilen hinzu:

#!/bin/sh

[ "$PAM_TYPE" = "open_session" ] || exit 0

INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.

echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.

exit 0

Danach erteilen Sie dem Skript die Ausführungsberechtigung:

$ Sudo chmod ugo+x /opt/custom/bin/info-session.sh

Führen Sie nun Folgendes aus:

$ Sudo pico /etc/pam.d/common-session

Fügen Sie diese Zeilen am Ende der Datei hinzu:

# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh

Es ist nicht erforderlich, einen Dienst neu zu starten. Beachten Sie, dass dieses Skript auch ausgeführt wird, wenn sich ein Benutzer anstelle von SSH über das Terminal anmeldet.

Hinweis 1: Sie können an espeak oder einen anderen Prozess weiterleiten, der Ihren Anforderungen entspricht (E-Mail, Push-Benachrichtigung usw.). ). Wenn Sie write verwenden und der Benutzer angemeldet ist, wird er oder sie Ausgabemeldungen direkt auf seinem Terminal sehen.

Referenzen:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on-user-login/

Verwandte:
Wie richte ich eine E-Mail-Benachrichtigung ein, wenn eine SSH-Anmeldung erfolgreich war?
https://serverfault.com/questions/400613/how-can-i-configure-my-server-to-notify-me-wever-it-is-remotely-accessed-via.)
https://serverfault.com/questions/395393/email-notification-about-each-ssh-connection-to-linux-server

0
Pestro

Du kannst den sshrc benutzen (man sshd, suche nach sshrc)

ssh führt die Datei/etc/ssh/sshrc aus, falls vorhanden, und Sie können von dort aus ein Skript ausführen (oder mehrere Skripte aufrufen)

sie können eine beliebige Bash-Variable wie $USER aufrufen oder die IP über abrufen

read -d " " ip <<< $SSH_CONNECTION

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

Abmeldeskript ... nun, das ist es, wonach ich suche! : D

0
higuita