Ubuntu / Debian / OpenSSH:在SSHlogin和/或注销时运行(系统)脚本

在Ubuntu上,我希望我的OpenSSH服务器在用户使用SSHlogin时启动脚本,最好传递主机名或IP以及用户名。 此外,我希望它运行一个脚本,每当一个会话终止(通过用户名)。 这些脚本不应该在用户会话中运行,而应该在系统范围内运行。

这个想法是在login和注销时给出audio警告,例如使用espeak ,并在外部显示器上显示信息。

我已经看到有一个pam-scripts包,但我不确定这是否做我想要的,也不知道如何使用它。

任何帮助表示赞赏! – 马库斯

(我也在askubuntu上发布了这个问题。)

这是一个由sshd_config中的ForceCommand调用的包装脚本。 这区分了login命令和通过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 

你可以用你想要的任何东西replace回显命令。 IP信息在$SSH_CONNECTION ,用它来做什么。

如果你调用这个/usr/local/bin/ssh-command.sh ,你可以把它添加到你的sshd_config

 ForceCommand /usr/local/bin/ssh-command.sh 

使用Match也可能是一个好主意,只会陷入某些用户。 假设所有的用户都在“戈比斯”组中:

 Match Group gobias ForceCommand /usr/local/bin/ssh-command.sh 

无论如何,也许值得一试。

只要写一个脚本来做任何你想做的事情,然后根据你的需要把它粘在/etc/profile或者可能是/etc/bash.bashrc 。 对这些文件的更改将适用于所有用户。 不过,我不确定如何使用这种方法通知注销。

或者,另一种方法是使用简单的守护进程监视/var/log/secure (或/var/log/auth ,取决于您使用的是哪个发行版)以获得新的(和closures的)ssh会话。 这样就可以发送login和注销通知。

如果文件/ etc / ssh / sshrc存在,则在读取用户环境之后但在启动用户的shell或命令之前,由sh(1)运行。 见man sshd

例如,下面添加到/ etc / ssh / sshrc将会产生用户通过OpenSSH成功​​login时显示的输出:

 ~$ 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