Linux 当用户从特定主机通过SSH登录时执行操作
我有一个问题困扰着我,我想知道是否有人试图实现以下目标:Linux 当用户从特定主机通过SSH登录时执行操作,linux,bash,ssh,profile,Linux,Bash,Ssh,Profile,我有一个问题困扰着我,我想知道是否有人试图实现以下目标: 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) 假设这是我在Linux环境中的“last”命令的结果: root pts/1 192.168.1.10 Wed F
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)
假设这是我在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)
如果“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)
现在我想执行一个操作,如果用户名等于'mary',主机为192.168.1.10
欢迎提出任何建议
提前感谢。一种方法是定期运行一个简单的脚本:
#!/bin/bash
users=$(last | sed -ne '/192\.168\.1\.10/ s/\([^ ]*\).*/\1/p')
for user in $users; do
sendmail "$user" < email.txt
done
#/bin/bash
用户=$(最后一次| sed-ne'/192\.168\.1\.10/s/\([^]*\)./\1/p')
对于用户,单位为$users;做
sendmail“$user”
这将把最后一个命令导入sed,以提取用户列表并将其保存到变量$users
中。sed命令使用-n
标志,因此它只打印我们告诉它的内容。首先,我们选择包含指定IP的行,带有/192\.168\.1\.10/
的“地址”。在这些行中,我们尝试提取空格前的字符,如果成功,则打印结果
然后,我们可以循环使用$users
变量并相应地执行操作
一种反复调用的方法是通过cron,一种更简单的方法是在true时执行
;do./my_script.bash;睡眠60;完成
您可以向/etc/profile
或等效文件添加一些内容,这些内容取决于$SSH\u CLIENT
的值。看起来您正在使用last
,因为默认情况下它读取的是/var/log/wtmp
,这是登录记录。who
命令还允许您读取相同的文件,但界面更符合您的需要
例如:
$ who --ips /var/log/wtmp | grep '^msw.*127.0.0.1'
msw pts/2 2012-10-07 15:52 127.0.0.1
msw pts/3 2012-10-07 15:55 127.0.0.1
这些会话都不是活动的,而是历史记录的。有一个特殊文件
/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
#/bin/bash
邮寄=user@domain.tld
受监视的用户=根用户
受监控的ip=x.x.x.x
主机名=$(主机名)
#添加欢迎信息:
printf>&2“\n帮助$hostname$USER\n”
阅读-d“ip谢谢您的回复。最终我找到了一个暂时可行的解决方案,但它确实有一个缺陷,我会在一分钟内指出
我已将以下内容添加到我的/etc/bashrc文件(或/etc/bash.bashrc,无论您使用的是什么环境):
我之前提到的缺陷实际上可能不是缺陷。如果您已经通过SSH连接到系统中,并且希望通过SSH连接到位于同一IP上的主机,请说SSHroot@your-主持人
我是谁
然后会打印“你的主持人”,但我认为这是应该的方式
不用说,可以修改上面的sed
语句,以便您也可以捕获用户名,并且可以扩展if/else
语句以满足您的需要
再次感谢您的回复。在ubuntu中,我添加了一个脚本
/etc/profile.d
当有人(用户ssh)登录时,它会向我的邮件发送一封电子邮件
#/etc/profile.d/run_on_loggin.sh
echo $(who i am) | mail -s 'SSH Login Notification' mymail@hotmail.com
我想创建一个php文件与smtp,发送电子邮件与我的邮件给我。。。
有时hotmail保存在垃圾邮件中
如果我有php文件,我会像
如果我想将var传递到文件php,请像
请原谅我的英语:3
注意:我认为此命令由用户运行,如果用户没有使用某些命令或发送电子邮件的权限,请小心。Re cron vs while,而不是使用inotifywait来检测/var/log/wtmp中的更改。谢谢Janito。我想一定有更“互动”的东西。我的想法是,一旦有人ssh-s进入服务器,如果lastlog被更新为一个值,那么同样的信息可以被捕获,然后放入/etc/bash.bashrc文件中,以便在登录时调用它。您测试过我的sshrc
文件吗?=)嗨,斯普特尼克。我们将到达第2级:)您知道如何排除记录来自cronjobs/代码片段的ssh命令的方法吗。我只对用户从控制台登录感兴趣。谢谢。把这个脚本放在一个文件中,然后把脚本的完整路径放在/etc/ssh/sshrc
中,因为sshrc文件不处理bash测试。相应地进行了后期编辑。我遇到了与@Sergey相同的问题。此外,它似乎不喜欢[[
。我在脚本中尝试了echo$SHELL
,以确认它是bash.FWIW[
有效。哦,dig
没有安装。因为正如我前面所说,您必须将此脚本放在文件中,而不是直接放在sshrc
中。sshrc
必须包含可执行脚本的完整路径。此脚本适用于所有用户,当他们登录时?当然,测试它,您将看到