it-swarm.com.de

Ermitteln Sie die IP-Adresse des Clients in einer SSH-Sitzung

Ich habe ein Skript, das von einer Person ausgeführt werden soll, die sich mit SSH am Server anmeldet.

Gibt es eine Möglichkeit, automatisch herauszufinden, von welcher IP-Adresse sich der Benutzer verbindet?

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 gerade herausfinden würde.

134
flybywire

Prüfen Sie, ob es eine Umgebungsvariable gibt:

$SSH_CLIENT 

OR

$SSH_CONNECTION

(oder andere Umgebungsvariablen), die bei der Anmeldung des Benutzers festgelegt wird. Verarbeiten Sie sie dann mit dem Benutzeranmeldeskript.

Extrahieren Sie die IP:

$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
221
nolim1t

Sie könnten den Befehl verwenden:

server:~# pinky

das wird dir so etwas geben:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133
91
vncprado

Versuchen Sie Folgendes, um nur die IP-Adresse zu erhalten:

who am i|awk '{ print $5}'
28
AlexP

Geben Sie einfach den folgenden Befehl auf Ihrem Linux-Rechner ein:

who
15
Bangar
who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'


export DISPLAY=`who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'`:0.0

Ich benutze dies, um meine DISPLAY-Variable für die Sitzung zu ermitteln, wenn ich mich über ssh anmelde und Remote X anzeigen muss.

5
Spindrift

Verbesserung einer früheren Antwort Gibt eine IP-Adresse anstelle des Hostnamens an. --ips nicht verfügbar unter OS X.

who am i --ips|awk '{print $5}' #ubuntu 14

universeller, ändern Sie $ 5 in $ 6 für OS X 10.11:

WORKSTATION=`who -m|awk '{print $5}'|sed 's/[()]//g'`
WORKSTATION_IP=`Dig +short $WORKSTATION`
if [[ -z "$WORKSTATION_IP" ]]; then WORKSTATION_IP="$WORKSTATION"; fi
echo $WORKSTATION_IP
3
SeeBenClick

Sie können es programmgesteuert über eine SSH-Bibliothek erhalten ( https://code.google.com/p/sshxcute ).

public static String getIpAddress() throws TaskExecFailException{
    ConnBean cb = new ConnBean(Host, username, password);
    SSHExec ssh = SSHExec.getInstance(cb);
    ssh.connect();
    CustomTask sampleTask = new ExecCommand("echo \"${SSH_CLIENT%% *}\"");
    String Result = ssh.exec(sampleTask).sysout;
    ssh.disconnect();   
    return Result;
}
2
vineetv2821993
netstat -tapen | grep ssh | awk '{ print $10}'

Ausgabe:

zwei # in meinem experiment

netstat -tapen | grep ssh | awk '{ print $4}' 

gibt die IP-Adresse an.

Ausgabe:

127.0.0.1:22 # in my experiment

Die Ergebnisse sind jedoch mit anderen Benutzern und anderen Dingen gemischt. Es braucht mehr Arbeit.

2
gerard
netstat -tapen | grep ssh | awk '{ print $4}'
2

Suchen Sie nach SSH-Verbindungen für das Konto "myusername".

Nimm die erste Ergebniszeichenfolge.

Nimm die fünfte Spalte.

Nach ":" aufteilen und 1. Teil zurückschicken (Portnummer wird nicht benötigt, wir wollen nur IP):

netstat -tapen | grep "sshd: myusername" | head -n1 | awk '{split ($ 5, a, ":"); Drucke ein [1]} '


Ein anderer Weg:

wer bin ich | awk '{l = Länge ($ 5) - 2; Drucke substr ($ 5, 2, l)} '

1
Nex

Linux: wer bin ich | awk '{print $ 5}' | sed 's/[()] // g'

AIX: wer bin ich | awk '{print $ 6}' | sed 's/[()] // g'

1
pfrandsen

netstat wird funktionieren (oben ungefähr so) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLISHED

1
aric
 who | cut -d"(" -f2 |cut -d")" -f1
1
danilo

Einen Daumen hoch für die Antwort von @Nikhil Katre:

Der einfachste Befehl zum Abrufen der letzten 10 am Computer angemeldeten Benutzer ist last|head.

Um alle Benutzer zu erhalten, verwenden Sie einfach den Befehl last

Derjenige, der who oder pinky verwendet, hat das getan, was grundsätzlich gefragt wird. Aber sie geben aber keine Informationen zu historischen Sitzungen.

Das könnte auch interessant sein, wenn Sie jemanden kennen möchten, der sich gerade angemeldet hat und Bereits abgemeldet ist, wenn Sie diese Prüfung starten.

wenn es ein Mehrbenutzersystem ist. Ich empfehle, das gewünschte Benutzerkonto hinzuzufügen:

last | grep $USER | head

BEARBEITEN:

In meinem Fall sind sowohl $ SSH_CLIENT als auch $ SSH_CONNECTION nicht vorhanden.

0
Kangqiao Zhao

Der einfachste Befehl zum Abrufen der letzten 10 am Computer angemeldeten Benutzer ist last|head.

Um alle Benutzer zu erhalten, verwenden Sie einfach den Befehl last

0
Nikhil Katre

Normalerweise gibt es einen Protokolleintrag in/var/log/messages (oder ähnlich, je nach Betriebssystem), den Sie mit dem Benutzernamen abrufen können.

0

Angenommen, er eröffnet eine interaktive Sitzung (dh 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) zu erhalten ) und versuchen Sie, dieses in /var/run/utmp zu finden (wo auch der Benutzername und die IP-Adresse stehen, von der die Verbindung stammt).

0
mihi

ein älterer Thread mit vielen Antworten, aber keiner ist genau das, wonach ich gesucht habe.

sshpid=$$
sshloop=0
while [ "$sshloop" = "0" ]; do
        if [ "$(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT)" ];
then
                read sshClientIP sshClientSport sshClientDport <<< $(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT | cut -d= -f2)
                sshloop=1
        else
                sshpid=$(cat /proc/${sshpid}/status | grep PPid | awk '{print $2}')
                [ "$sshpid" = "0" ] && sshClientIP="localhost" && sshloop=1
        fi
done

diese Methode ist mit direkten SSH-, Sudoed-Benutzern und Bildschirmsitzungen kompatibel. Es wird durch den Prozessbaum geführt, bis es eine PID mit der SSH_CLIENT-Variablen findet. Anschließend wird seine IP als $ sshClientIP aufgezeichnet. Wenn es zu weit oben in der Baumstruktur erscheint, wird die IP als 'localhost' aufgezeichnet und die Schleife verlassen.

0
Andrej