2013-05-09 36 views
6

我使用SSH連接創建本地模擬器(未連接到互聯網)。我已經開始在特定範圍的端口號上使用sshd,併爲這些端口號設置了一系列的設備。我必須找到當前連接的端口號。查找當前連接的端口號SSH

OS的CentOS 5.5 的OpenSSH 6.1

我已經做了以下。它適用於正常使用(手動用戶)。但在嘗試嚴格測試(自動化)時,似乎有時找不到端口號。

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

您的grep的PID模式應該是'$ PID /',因爲它在輸出中以這種形式呈現;否則,您可能會錯誤地匹配與您嘗試匹配的「PID」編號相同的端口。 – Petesh 2013-05-09 08:15:14

回答

12

OpenSSH服務器將設置可變$SSH_CLIENT,其中包含當前的IP,客戶端和服務器端用空格分隔:

$ echo "$SSH_CLIENT" 
127.0.0.1 59064 22 

爲了獲取當前會話連接的端口號,因此您可以使用echo ${SSH_CLIENT##* }

+1

,如果他想讓他可以從'/ proc//environ'文件中讀取環境變量,通過管道通過'tr'\ 0''\ n'' – Petesh 2013-05-09 08:12:20

+0

@那個其他人輝煌!我的整個劇本現在都被縮減爲一個回聲命令。我找不到這個變量。日Thnx。 – Antarus 2013-05-09 08:50:31

相關問題