我有一个脚本,将由一个人使用SSH登录到服务器运行。

是否有一种方法可以自动找出用户从哪个IP地址连接?

当然,我可以询问用户(这是程序员的工具,所以这没有问题),但如果我自己找到答案,那就更好了。


当前回答

netstat -tapen | grep ssh | awk '{ print $10}'

输出:

在我的实验中有两个

netstat -tapen | grep ssh | awk '{ print $4}' 

给出IP地址。

输出:

127.0.0.1:22 # in my experiment

但结果和其他用户混在一起。它需要更多的工作。

其他回答

通常在/var/log/messages(或类似的,取决于你的操作系统)中有一个日志条目,你可以用用户名来grep它。

搜索“myusername”帐户的SSH连接;

获取第一个结果字符串;

以第五纵队为例;

通过“:”分割并返回第一部分(端口号不需要,我们只需要IP):

Netstat -tapen | grep "sshd: myusername" | head -n1 | awk '{split($5, a, ":");打印一个[1]}’


另一种方法:

我是谁| awk '{l = length($5) - 2;打印substr($ 5,2, l)}'

 who | cut -d"(" -f2 |cut -d")" -f1

您可以使用命令:

server:~# pinky

它会给你这样的东西:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133

检查是否有一个环境变量叫做:

$SSH_CLIENT 

OR

$SSH_CONNECTION

(或任何其他环境变量),在用户登录时设置。然后使用用户登录脚本处理它。

提取IP:

$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4