在 Ubuntu 上,我希望我的 OpenSSH 服务器在用户使用 SSH 登录时启动一个脚本,理想情况下传递主机名或 IP 以及用户名。此外,我希望它在会话终止时运行一个脚本(传递用户名)。这些脚本不应在用户会话中运行,而应在系统范围内运行。
其想法是在登录和注销时发出音频警告,例如使用espeak
,并在外部显示器上显示信息。
我看到有一个pam-scripts
包,但我不确定它是否能满足我的要求,也不确定如何使用它。
任何帮助都值得感激!——马库斯
(我也在问库本图。
答案1
这是 sshd_config 中 ForceCommand 调用的包装器脚本。它区分了登录命令和通过 ssh 调用的命令,例如ssh host "ls -l"
,因为您可能希望以不同的方式处理它们。
#!/bin/bash
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
eval $SSH_ORIGINAL_COMMAND
else
echo "LOGIN: $USER $SSH_CONNECTION" >> /tmp/ssh.log
$SHELL
echo "LOGOUT: $USER $SSH_CONNECTION" >> /tmp/ssh.log
fi
您可以用任何您想要的命令替换 echo 命令。IP 信息在 中$SSH_CONNECTION
,您可以随意使用它。
如果你调用这个/usr/local/bin/ssh-command.sh
,你可以将其添加到你的sshd_config
:
ForceCommand /usr/local/bin/ssh-command.sh
用这种方法来捕获某些用户可能也是个好主意Match
。假设所有用户都属于“gobias”组:
Match Group gobias
ForceCommand /usr/local/bin/ssh-command.sh
无论如何,也许值得一试。
答案2
只需编写一个脚本来执行任何您想做的事情,然后将其粘贴进去/etc/profile
或可能/etc/bash.bashrc
取决于您的需要。对这些文件的更改将应用于所有用户。不过,我不确定您如何使用这种方法在注销时发出通知。
或者,另一种方法是使用一个简单的守护进程监控/var/log/secure
(或/var/log/auth
,取决于您使用的发行版)新的(和关闭的)ssh 会话。这样,它就可以在登录和注销时发送通知。
答案3
如果文件 /etc/ssh/sshrc 存在,则 sh(1) 会在读取用户环境之后、启动用户 shell 或命令之前运行该文件。请参阅man sshd
。
例如,将以下内容添加到 /etc/ssh/sshrc 将产生用户通过 OpenSSH 成功登录时显示的输出:
~$ cat /etc/ssh/sshrc
echo "Login by $USER from $SSH_CLIENT on `date`" >> /var/log/ssh_connections.log
/var/log/ssh_connections.log 中的输出:
Login by Markus from 10.0.0.1 57853 22 on Fri Oct 29 03:41:31 2010