8

我正在使用 SSH 连接创建一个本地模拟器(未连接到互联网)。我已经在特定范围的端口号上启动了 sshd,并对一系列设备进行了 NAT。我必须找到当前连接的端口号。

操作系统 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
4

1 回答 1

15

OpenSSH 服务器将设置变量$SSH_CLIENT,其中包含当前 ip、客户端端口和服务器端口,以空格分隔:

$ echo "$SSH_CLIENT"
127.0.0.1 59064 22

要获取当前会话连接的端口号,您可以使用echo ${SSH_CLIENT##* }.

于 2013-05-09T07:42:52.637 回答