添加一个额外的检查(bash脚本)到sshd服务器

是否可以在sshd守护进程/服务器的login过程中运行其他脚本?

我想运行一个额外的命令,使用IP地址和尝试的用户名。 如果脚本返回退出状态0,它可以通过,否则login应该被拒绝。

我在SSHD文档中找不到任何东西。

似乎你可能正试图重塑…

您可以在sshd_config中configurationAllowUsers以仅允许特定用户,并且可以通过指定主机来进一步限制其访问权限

AllowUsers这个关键字后面跟着一个用空格分隔的用户名模式列表。 如果指定,则仅允许login符合与其中一种模式相匹配的用户名。 只有用户名是有效的; 数字用户ID不被识别。 默认情况下,所有用户都可以login。 如果模式采用USER @ HOSTforms,则分别检查USER和HOST,限制来自特定主机的特定用户的login。

有关模式的更多信息,请参见ssh_config(5)中的PATTERNS

模式可能相当复杂,所以你可以使用

 AllowUsers [email protected].? user2 user2 

等等。

我不会辩论你正在尝试的正确性。 这个sshdconfigurationvariables会为每个login运行一个命令,你可以决定是否继续从这个程序login。

  ForceCommand Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present. The command is invoked by using the user's login shell with the -c option. This applies to shell, command, or subsystem execution. It is most useful inside a Match block. The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment variable. Specifying a command of ``internal-sftp'' will force the use of an in-process sftp server that requires no support files when used with ChrootDirectory. 

您可以find如何使用此选项来限制duo_unix源代码中的访问的源代码示例。 https://github.com/duosecurity/duo_unix

ForceCommand在用户上下文中运行,并将其转义到shell中,如果使用此方法来限制访问,则必须考虑这一点。 我的猜测是,捕捉信号的C程序已经足够防弹了。

向SSHvalidation添加附加要求的build议方法是更改​​PAMconfiguration。

现有的pam_exec PAM模块允许您调用任何外部脚本或命令。 PAM将设置许多环境variables,包括可以在脚本中使用的PAM_RHOST和PAM_USER。

根据您的pam模块堆栈情况,只能为成功进行身份validation的用户或所有login尝试调用脚本。

PAM_RHOST实际上可能包含远程主机名而不是ip地址,这取决于PAM的实现

PAM_USER是用户尝试login时提供的用户名。