Führen Sie den Befehl auf dem SSH-Server aus, wenn sich ein Benutzer verbindet, auch nur zum Tunneln

Führen Sie den Befehl auf dem SSH-Server aus, wenn sich ein Benutzer verbindet, auch nur zum Tunneln

Als Administrator eines von mehreren Personen verwendeten OpenBSD-SSH-Jumphosts möchte ich jedes Mal, wenn ein Benutzer eine Verbindung über SSH herstellt, einen bestimmten Befehl ausführen, und sei es nur zum Tunneln.

Ist das möglich?

Ich habe versucht, ForceCommandund zu verwenden /etc/sshrc, aber diese scheinen nur anzuwenden zu sein, wenn der Benutzer eine interaktive Sitzung hat, und andernfalls nicht.

Da ich OpenBSD verwende, funktioniert leider nichts PAM-basiertes, d. h.Diese Antwort zu Unix und Linux

Das Skript wird einfach sendmailunter Verwendung von whoamiund ausgeführt $SSH_CONNECTION, um mir mitzuteilen, wer sich von wo aus angemeldet hat.

#!/bin/sh

[email protected]

sendmail -F alerts -f $EMAIL root << EOF
Subject: New Login For $1
Message-ID: <$(date +%s)@$(hostname)>
X-Mailer: OpenSMTPD
Content-Type: text/plain

There has been a new login for $1 on $SSH_CONNECTION
EOF

Antwort1

Sie können Folgendes überwachen /var/log/authlogund verwenden, awkum Ihnen eine Nachricht zu senden, wenn eine bestimmte Zeile übereinstimmt:

tail -f /var/log/authlog | awk '/Accepted pubkey/ { system("mail -s " $0 " [email protected] << EOF\nEOF") }'

Sie können es natürlich /Accepted pubkey/durch ein anderes Muster ersetzen, das zu Ihrem Fall passt. Ich habe mich dafür entschieden, leere E-Mails mit der Protokollzeile als Betreff zu senden, um das Lesen auf dem MUA zu erleichtern, aber Sie bevorzugen vielleicht etwas wie

system("mail -s New\\ Login [email protected] << EOF\n" $0 "\nEOF")

verwandte Informationen