我怎样才能创建一次性 sshd 进程?

我怎样才能创建一次性 sshd 进程?

我正在尝试找到一些sshd只接受一个连接的调用(Ubuntu 上的 OpenSSH),然后sshd在该连接关闭时终止该过程。

我在文档中没有看到任何内容sshd表明这本质上是可能的,所以我在想它可能可以设置nc为一次性代理,但这似乎并不能解决sshd连接关闭后进程继续运行的问题。

有人有主意吗?

答案1

在调试模式下运行sshd使其只接受一个连接然后退出,如手册页所述sshd

-d

调试模式。服务器将详细的调试输出发送到标准错误,而不会将自身置于后台。服务器也不会分叉,并且只会处理一个连接。此选项仅用于服务器的调试。多个 -d 选项可提高调试级别。最大为 3。

如果您像这样运行服务器,这是调试的典型用例:

/usr/sbin/sshd -d

答案2

也许你可以使用pam它。在你的/etc/pam.d目录中找到一个与 SSH 相关的文件(在我的情况下,它sshd在 Ubuntu Trusty 机器上被调用)。编辑它并添加如下一行:

session     optional    pam_exec.so quiet /opt/myscript.sh

这将使该脚本在任何登录和注销时被调用。由于您只希望在注销时执行操作,因此脚本的内容可能如下所示:

#!/bin/sh
if [ "$PAM_TYPE" = "close_session" ]; then
  /etc/init.d/sshd stop
fi

相关内容