我有一个脚本,将由一个人使用SSH登录到服务器运行。
是否有一种方法可以自动找出用户从哪个IP地址连接?
当然,我可以询问用户(这是程序员的工具,所以这没有问题),但如果我自己找到答案,那就更好了。
我有一个脚本,将由一个人使用SSH登录到服务器运行。
是否有一种方法可以自动找出用户从哪个IP地址连接?
当然,我可以询问用户(这是程序员的工具,所以这没有问题),但如果我自己找到答案,那就更好了。
当前回答
改进之前的答案。给出ip地址而不是主机名。——ip在OS X上不可用。
who am i --ips|awk '{print $5}' #ubuntu 14
更通用的是,OS X 10.11将5美元改为6美元:
WORKSTATION=`who -m|awk '{print $5}'|sed 's/[()]//g'`
WORKSTATION_IP=`dig +short $WORKSTATION`
if [[ -z "$WORKSTATION_IP" ]]; then WORKSTATION_IP="$WORKSTATION"; fi
echo $WORKSTATION_IP
其他回答
Netstat将工作(在顶部像这样) TCP 0 0 10.x.xx。xx: ssh someipaddress.or。建立domainame: 9379
我在Debian 10上从who -m——ips得到以下输出:
root pts/0 12月4日06:45 123.123.123.123
看起来像一个新的列被添加,所以{打印$5}或“采取第五列”尝试不再工作。
试试这个:
who -m --ips | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
来源:
@Yvan对@AlexP回答的评论 @Sankalp的回答
您可以使用命令:
server:~# pinky
它会给你这样的东西:
Login Name TTY Idle When Where
root root pts/0 2009-06-15 13:41 192.168.1.133
who | cut -d"(" -f2 |cut -d")" -f1
假设他打开了一个交互式会话(即分配了一个伪终端),而您可以访问stdin,您可以在该设备上调用ioctl以获得设备号(/dev/pts/4711),并尝试在/var/run/utmp中找到该设备号(其中还将有用户名和连接起源于的IP地址)。