【问题标题】:Find currently connected port number SSH查找当前连接的端口号 SSH
【发布时间】:2013-05-03 14:19:43
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您的 PID grep 模式应该是 $PID/,因为它在输出中以该形式呈现;否则,您可能会错误地匹配编号与您尝试匹配的 PID 相同的端口。

标签: linux bash shell ssh


【解决方案1】:

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

$ echo "$SSH_CLIENT"
127.0.0.1 59064 22

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

【讨论】:

  • 如果他愿意,他可以通过tr '\0' '\n' 管道从/proc/<pid>/environ 文件中读取该环境变量
  • @that other guy 太棒了!我的整个脚本现在被简化为一个 echo 命令。我找不到这个变量。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-08-28
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多