在bash脚本中获取远程主机名

在bash脚本中获取远程主机名

抱歉,我对 Linux bash 命令的了解非常基础,我已经搜索了一段时间,但我不能 100% 确定我需要搜索什么。

我想知道是否有办法在 Linux bash 脚本中获取当前登录用户的远程主机名?我有一个脚本,每次用户运行它时我都需要登录。我像这样获取日期:

cdat=`/bin/date +%a' '%d' '%h' '%Y', '%H':'%M`;

我现在需要添加用户远程主机(而不是他们登录时使用的用户名)。我也不是 100% 确定我在这里使用了正确的术语,只是为了澄清一下;我所说的“远程主机名”是指在我通过 ssh 登录的大多数服务器上打印在屏幕上的相同输出,例如:

Last login: Mon Jul 22 16:35:09 2013 from win7-i7-stuart.my.domain.com

我正在寻找那win7-i7-stuart.my.domain.com一点。

答案1

who
jmcnama    pts/4        Jul 18 13:30    (9010-b6m2cx1.nmgco.com)

who 输出的最后一个字段提供:

username=jmcnama
remote=$(who | awk -v user=$username '$1 == user {print $(NF)}')

可能还有其他问题,例如用户多次登录。最后一个命令也有帮助。最后有问题 - 它可以截断长源节点值。

据我所知,没有 /proc“文件”显示登录的来源。最后和谁的数据存储在 /var//log/wtmp 中(通常)。因此,这是此信息的唯一文件来源。

答案2

最好使用该命令who am i,这样您就不会获得重复的信息,并且在仅使用普通的who.

$ who am i
sam      pts/6        2013-07-22 13:21 (192.168.1.110)

幽默地说,你也可以使用这个:

$ who mom likes
sam      pts/6        2013-07-22 13:21 (192.168.1.110)

您可以使用解析它sed,以便它只是他们连接的主机:

$ who am i | sed 's/.*(\(.*\))/\1/'
192.168.1.110

您还可以使用以下命令查看用户登录的完整历史记录last

$ last <username>

例如:

$ last sam | less
sam      pts/6        192.168.1.110    Mon Jul 22 13:21   still logged in   
sam      pts/6        192.168.1.110    Mon Jul 22 11:02 - 11:02  (00:00)    
sam      pts/5        192.168.1.110    Thu Jul 18 14:41 - 16:41  (01:59)    
sam      pts/5        192.168.1.110    Wed Jul 17 15:56 - 16:28  (00:31)    
sam      pts/5        192.168.1.110    Wed Jul 17 15:56 - 15:56  (00:00)    
sam      pts/4        192.168.1.110    Wed Jul 17 14:28 - 14:29  (00:00)    
sam      pts/7        192.168.1.110    Tue Jul 16 16:27 - 16:50  (00:23)

参考

相关内容