Ich habe ein Skript, das von einer Person ausgeführt werden soll, die sich mit SSH beim Server anmeldet .
Gibt es eine Möglichkeit, automatisch herauszufinden, von welcher IP-Adresse der Benutzer eine Verbindung herstellt?
Natürlich könnte ich den Benutzer fragen (es ist ein Tool für Programmierer, also kein Problem damit), aber es wäre cooler, wenn ich es nur herausfinden würde.
linux
networking
ssh
ip-address
Flybywire
quelle
quelle
Antworten:
Überprüfen Sie, ob es eine Umgebungsvariable mit dem Namen gibt:
ODER
(oder andere Umgebungsvariablen), die festgelegt werden, wenn sich der Benutzer anmeldet. Verarbeiten Sie sie dann mithilfe des Benutzeranmeldeskripts.
IP extrahieren:
quelle
${SSH_CLIENT%% *}
sudo -E
Sie könnten den folgenden Befehl verwenden:
das wird dir so etwas geben:
quelle
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Versuchen Sie Folgendes, um nur die IP-Adresse zu erhalten:
quelle
who am i
! =whoami
zumindest unter Linux. Es gibt eine fünfte Sache, und es ist der Hostname des Clients.who am i
: Die Manpage fürwho
sagt :If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Also funktioniert wirklich alles mit zwei Wörtern, auch Dinge wiewho likes icecream
.who -m --ips|awk '{print $5}'
so reduziert, dass ich nur IP und keine Reverse-DNS-Antwort hatte. Danke für die Hilfe weiterwho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Geben Sie einfach den folgenden Befehl auf Ihrem Linux-Computer ein:
quelle
quelle
Ich benutze dies, um meine DISPLAY-Variable für die Sitzung zu bestimmen, wenn ich mich über ssh anmelde und Remote X anzeigen muss.
quelle
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
Der letzte Teil entgeht den Punkten.Eine vorherige Antwort verbessern. Gibt die IP-Adresse anstelle des Hostnamens an. --ips unter OS X nicht verfügbar.
universeller, ändern Sie $ 5 in $ 6 für OS X 10.11:
quelle
quelle
(No info could be read for "-p": geteuid()=507 but you should be root.)
sudo ss -tapen | grep ssh | awk '{ print $4}'|grep -v ':22$'
?Sie können es programmgesteuert über eine SSH-Bibliothek ( https://code.google.com/p/sshxcute ) abrufen.
quelle
netstat funktioniert (oben ungefähr so) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLISHED
quelle
Ausgabe:
zwei # in meinem Experiment
gibt die IP-Adresse an.
Ausgabe:
Aber die Ergebnisse sind gemischt mit anderen Benutzern und Sachen. Es braucht mehr Arbeit.
quelle
Ein älterer Thread mit vielen Antworten, aber keiner ist genau das, wonach ich gesucht habe, also trage ich meinen bei:
Diese Methode ist kompatibel mit direkten SSH-, Sudoed-Benutzern und Bildschirmsitzungen. Es wird den Prozessbaum durchlaufen, bis es eine PID mit der Variablen SSH_CLIENT findet, und dann seine IP als $ sshClientIP aufzeichnen. Wenn es zu weit oben im Baum ist, zeichnet es die IP als 'localhost' auf und verlässt die Schleife.
quelle
Normalerweise gibt es einen Protokolleintrag in / var / log / messages (oder ähnlich, abhängig von Ihrem Betriebssystem), den Sie mit dem Benutzernamen abrufen können.
quelle
Linux: wer bin ich | awk '{print $ 5}' | sed 's / [()] // g'
AIX: wer bin ich | awk '{print $ 6}' | sed 's / [()] // g'
quelle
Suchen Sie nach SSH-Verbindungen für das Konto "myusername".
Nehmen Sie die erste Ergebniszeichenfolge.
Nehmen Sie die 5. Spalte;
Geteilt durch ":" und Rückgabe des 1. Teils (Portnummer nicht erforderlich, wir wollen nur IP):
netstat -tapen | grep "sshd: myusername" | Kopf -n1 | awk '{split ($ 5, a, ":"); print a [1]} '
Ein anderer Weg:
wer bin ich | awk '{l = Länge ($ 5) - 2; print substr ($ 5, 2, l)} '
quelle
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
sagt, mein SSH-Kunde ist von2a02
und Ihr "Ein anderer Weg:" sagttmux(2445).%3
Angenommen, er öffnet eine interaktive Sitzung ( dh er weist ein Pseudo-Terminal zu ) und Sie haben Zugriff auf stdin. Sie können ein ioctl auf diesem Gerät aufrufen, um die Gerätenummer (/ dev / pts / 4711) abzurufen und zu versuchen, diese zu finden / var / run / utmp (wobei es auch den Benutzernamen und die IP-Adresse gibt, von der die Verbindung stammt).
quelle
Ein Daumen hoch für die Antwort von @Nikhil Katre:
Derjenige, der verwendet
who
oderpinky
getan hat, was grundsätzlich gefragt wird. Aber sie geben keine historischen Sitzungsinformationen.Dies könnte auch interessant sein, wenn Sie jemanden kennenlernen möchten, der sich gerade angemeldet und abgemeldet hat, als Sie mit dieser Überprüfung beginnen.
wenn es sich um ein Mehrbenutzersystem handelt. Ich empfehle, das gesuchte Benutzerkonto hinzuzufügen:
BEARBEITEN:
In meinem Fall existieren sowohl $ SSH_CLIENT als auch $ SSH_CONNECTION nicht.
quelle
Der einfachste Befehl, um die letzten 10 Benutzer am Computer anzumelden, ist
last|head
. Verwenden Sie einfach denlast
Befehl, um alle Benutzer abzurufenquelle
Ich erhalte die folgende Ausgabe von
who -m --ips
Debian 10:Sieht aus wie eine neue Spalte hinzugefügt, so
{print $5}
oder „ fünfte Kolonne nehmen “ Versuchen nicht mehr funktionieren.Versuche dies:
Quelle:
quelle