2013-05-09 6 views
6

Ich erstelle einen lokalen Simulator (nicht mit dem Internet verbunden) mit SSH-Verbindung. Ich habe sshd auf eine bestimmte Reihe von Port-Nummern und NATing eine Reihe von Geräten zu denen gestartet. Ich muss die aktuell verbundene Portnummer finden.Aktuelle Verbindungsportnummer finden SSH

OS CentOS 5.5 OpenSSH 6.1

Ich habe folgendes getan. Es funktioniert für den normalen Gebrauch (manuelle Benutzer). Aber wenn Sie einen rigorosen Test (automatisiert) versuchen, scheint es, dass es manchmal fehlschlägt, die Portnummer zu finden.

#!/bin/bash 

WHOINFO=`who -m` 

USERNAME=`echo $WHOINFO | awk 'NR==1{print $1}'` 
PTSNUMBER=`echo $WHOINFO | awk 'NR==1{print $2}'` 

USERSTR=$USERNAME"@"$PTSNUMBER 

PID=`ps -eLf | grep $USERSTR | awk 'NR==1{print $3}'` 

if [ -z "$PID" ]; 
then 
     exit 
fi 

PORTSTR=`netstat -natp | grep $PID | awk 'NR==1{print $4}'` 

PORTNUMBER=${PORTSTR//*:/} 

echo $PORTNUMBER 
+0

Ihr grep Muster für PID sollte '$ PID /' sein, wie es in dieser Form in der Ausgabe dargestellt wird; Andernfalls können Sie die Ports falsch zuordnen, die mit der PID identisch sind, mit der Sie übereinstimmen möchten. – Petesh

Antwort

12

Ein OpenSSH-Server die Variable $SSH_CLIENT gesetzt wird, der die aktuelle IP, Client-Port und Server-Port durch Leerzeichen getrennt enthält:

$ echo "$SSH_CLIENT" 
127.0.0.1 59064 22 

die Portnummer der aktuellen Sitzung verbunden ist, zu erhalten, Sie können daher echo ${SSH_CLIENT##* } verwenden.

+1

und wenn er will, kann er diese Umgebungsvariable aus der '/ proc//environ'-Datei lesen, indem er es durch 'tr' \ 0 '' \ n'' – Petesh

+0

@that anderen Kerl Brilliant! Mein gesamtes Skript wurde jetzt auf einen Echo-Befehl reduziert. Ich konnte diese Variable nicht finden. Thnx. – Antarus

Verwandte Themen