为 sshd 服务器添加额外检查(bash 脚本)

为 sshd 服务器添加额外检查(bash 脚本)

是否可以在 sshd 守护进程/服务器的登录过程中运行附加脚本?

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

我在 SSHD 文档中找不到任何内容。

答案1

看来您可能正在尝试重新发明......

您可以在 sshd_config 中配置 AllowUsers 以仅允许特定用户,并且可以通过指定主机进一步限制他们的访问权限

AllowUsers 此关键字后面可以跟一串用户名模式,以空格分隔。如果指定,则仅允许与其中一个模式匹配的用户名登录。只有用户名才有效;数字用户 ID 不被识别。默认情况下,允许所有用户登录。如果模式采用 USER@HOST 形式,则分别检查 USER 和 HOST,将登录限制为特定主机的特定用户。

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

模式可能非常复杂,因此您可以使用

AllowUsers [email protected].? user2 user2

等等。

答案2

我不会争论你尝试的正确性。此 sshd 配置变量将为每次登录运行一个命令,你可以决定是否继续从此程序登录。

 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.

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

ForceCommand 在用户上下文中运行,如果您使用此方法限制访问,则必须考虑从用户上下文中退出并进入 shell。我猜除了捕获信号的 C 程序之外,没有任何东西能够足够可靠。

答案3

向 SSH 身份验证添加其他要求的推荐方法是更改​​ PAM 配置。

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

根据您如何堆叠 pam 模块,该脚本只能为成功验证的用户或所有登录尝试的用户调用。

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

PAM_USER 是尝试登录的用户提供的用户名。

相关内容