用户通过SSH从特定主机登录时执行操作

Tam*_*mas 9 linux ssh bash profile

我有一个令我困惑的问题,我想知道是否有人试图实现以下目标:

我们假设这是我在Linux环境中使用'last'命令的结果:

root  pts/1        192.168.1.10      Wed Feb 10 07:04 - 07:57  (00:52)  
root  pts/2                          Tue Feb  9 22:00 - 00:13  (02:13)   
Run Code Online (Sandbox Code Playgroud)

如果"root"用户已从192.168.1.10登录,如何设置特定操作(例如修改的MOTD或发送电子邮件).有没有办法捕获这些信息?

这个问题的第二部分是如何使上述检查更加健壮 - 即如果我有以下内容:

mary  pts/1        192.168.1.10      Wed Feb 10 07:04 - 07:57  (00:52)  
bob   pts/2                          Tue Feb  9 22:00 - 00:13  (02:13)      
Run Code Online (Sandbox Code Playgroud)

现在,如果用户名等于'mary'且主机为192.168.1.10,我想执行一个操作.

欢迎任何建议.

先感谢您.

Gil*_*not 17

有一个特殊的文件/etc/ssh/sshrc,你可以放置一些命令,每次有人连接时都会运行ssh.我为你写的:

#!/bin/bash

mail=user@domain.tld
monitored_user=root
monitored_ip=x.x.x.x

hostname=$(hostname)

# add a welcome message:
printf >&2 "\nWelcome on $hostname $USER\n"

read -d " " ip <<< $SSH_CONNECTION

[[ $ip == $monitored_ip && $USER == $monitored_user ]] || exit 0

date=$(date "+%d.%m.%Y %Hh%M")
reverse=$(dig -x $ip +short)

mail -s "Connexion of $USER on $hostname" $mail <<EOF

IP: $ip
Reverse: $reverse
Date: $date
EOF
Run Code Online (Sandbox Code Playgroud)

将此脚本放在一个文件中,然后将脚本的完整路径放入 /etc/ssh/sshrc

man ssh:

/ etc/ssh/sshrc:当用户登录时,在用户的shell(或命令)启动之前,由ssh执行此文件中的命令.有关更多信息,请参见sshd(8)手册页.


Tam*_*mas 1

感谢你的回复。最终我设法找到了一个暂时有效的解决方案,但它确实有一个缺陷,我稍后会指出。

我已将以下内容添加到我的 /etc/bashrc 文件(或 /etc/bash.bashrc 无论您使用的环境):

HOST="192.168.0.1"
RHOST=`who am i | sed -n 's/.*(\([^) ]*\).*/\1/p; 1q'`
if [ "$RHOST" == "$HOST" ]; then
        echo "SAY WHAT!"
        #add further actions here if needed
fi
Run Code Online (Sandbox Code Playgroud)

我之前所说的缺陷实际上可能并不是缺陷。如果你已经通过 SSH 连接到系统,并且想要通过 SSH 连接到位于同一 IP 上的主机,那么ssh root@your-host who am i会打印“your-host”,但我认为应该是这样。

不用说,sed可以修改上述语句,以便您也可以捕获用户名,并且可以扩展该if/else语句以满足您的需求。

再次感谢您的所有回复。