2013-05-09 3 views
6

sto creando un simulatore locale (non connesso a Internet) tramite la connessione SSH. Ho avviato sshd su un particolare intervallo di numeri di porta e NATing su una gamma di dispositivi. Devo trovare il numero di porta attualmente connesso.Trova il numero di porta attualmente connesso SSH

OS CentOS 5.5 OpenSSH 6.1

ho fatto quanto segue. Funziona per l'uso normale (utente manuale). Ma quando si prova un test rigoroso (automatico) sembra che a volte non riesca a trovare il numero di porta.

#!/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

il tuo modello di grep per PID dovrebbe essere '$ PID /', come viene presentato in quella forma nell'output; altrimenti potresti erroneamente abbinare le porte che sono numerate come il 'PID' che stai cercando di abbinare. – Petesh

risposta

12

un server OpenSSH imposterà la variabile $SSH_CLIENT, che contiene l'IP corrente, porta del client e la porta del server separati da spazi:

$ echo "$SSH_CLIENT" 
127.0.0.1 59064 22 

Per ottenere il numero di porta la sessione corrente è collegato a, è quindi possibile utilizzare echo ${SSH_CLIENT##* }.

+1

e, se lo desidera, può leggere quella variabile d'ambiente dal file '/ proc//environ' eseguendo il piping attraverso' tr '\ 0' '\ n'' – Petesh

+0

@that altro ragazzo Brilliant! il mio intero script ora è stato ridotto a un comando echo. Non sono riuscito a trovare questa variabile. Thnx. – Antarus