2013-05-09 39 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

相关问题