Ich habe einen Ubuntu20-Server und ein Bash-Skript in /etc/profile.d sendet eine Nachricht an Telegram, wenn sich jemand per SSH verbindet. Der Zweck dieses Skripts besteht darin, herauszufinden, ob ein Hack vorliegt, und Maßnahmen zu ergreifen.
Ich möchte den Namen des Computers wissen, der mit SSH verbunden ist, um ihn in eine Telegrammnachricht aufzunehmen, um zu sehen, ob der Verbinder jemand aus meinem Team oder ein Hacker ist. Ich habe versucht, das Whoami-Ergebnis in einer Variablen zu speichern, aber es zeigt den Linux-Benutzernamen an, nicht den Computerbenutzernamen des Verbinders. Kann ich den Whoami-Befehl auf dem Gerät des Verbinders ausführen? Oder gibt es eine andere Möglichkeit, das zu erreichen, was ich mir vorstelle? Der Bash-Code:
#!/usr/bin/env bash
# Import credentials form config file
. /home/roots/credentials.config
URL="https://api.telegram.org/bot${KEY}/sendMessage"
DATE="$(date "+%d %b %Y %H:%M")"
if [ -n "$SSH_CLIENT" ]; then
ip="$(echo $SSH_CONNECTION | cut -d " " -f 1)"
TEXT=" New login via ssh, username ${USER} IP (*${ip}*)
Date: ${DATE}"
curl -s -d "chat_id=${USERID}&text=${TEXT}&disable_web_page_preview=true&parse_mode=markdown" $URL > /dev/null
fi
Antwort1
Basierend auf dem Beitrag Ermitteln des Namens des aktuell über SSH verbundenen Hosts:
ssh
Legt die Umgebungsvariable so fest$SSH_CONNECTION
, dass sie die Client-IP-Adresse, die Client-Portnummer, die Server-IP-Adresse und die Server-Portnummer durch Leerzeichen getrennt enthält.Sie können
echo ${SSH_CONNECTION%% *}
um die IP-Adresse des Clients zu erhalten. Um den DNS-Namen zu erhalten, verwenden Sie etwas wie
host
oderdig -x
:host ${SSH_CONNECTION%% *}
Versuchen Sie dann den Befehl host ${SSH_CONNECTION%% *}
.
In einer anderen Antwort wurde darauf hingewiesen, dass SSH_CONNECTION
beim Starten eines Unterprozesses, beispielsweise durch den Aufruf, verloren geht su
.
Andere Antworten im Beitrag könnten ebenfalls hilfreich sein.