如何在OpenSSH中动态允许用户?

时间:2019-03-05 21:17:35

标签: openssh libssh

我希望能够基于外部脚本使用OpenSSH的结果来阻止或允许用户。我看到libsshsupport for callbacks,但是在阅读OpenSSH手册页后,我找不到该功能交给用户的任何地方。

例如,我希望能够维护包含用户名黑名单或白名单的文件,甚至API,并让OpenSSH在身份验证过程中查阅这些列表。

到目前为止,我的想法以及为什么它们不足:

  1. 使用sshd_configAllowUsers这是一个开始,但是由于它不从文件中读取,因此不是动态的。每次都需要更改配置文件,然后重新启动服务。此外,从脚本修改配置文件是危险且可怕的。

  2. 使用sshd_configAuthorizedKeysCommand。不幸的是,尽管这确实允许您指定脚本并根据结果授予访问权限,但并不能允许拒绝访问。如果脚本未返回任何内容,则sshd继续尝试其他身份验证方法。

  3. 使用实现libssh回调的附加功能重新编译OpenSSH。出于可维护性的明显原因,我宁愿不这样做。

在阅读文档时还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

对于2.,您可以使用AuthenticationMethods将身份验证限制为 publickey

另一种选择是使用PAM并实现自己的PAM身份验证模块。

答案 1 :(得分:0)

如果禁用检查authorized_keys,选项2就足够了:

sshd_config:

AuthorizedKeysCommand /etc/ssh/my-custom-command
AuthorizedKeysUser nobody
AuthorizedKeysFile none

我的自定义命令:

# $1 is user, as passed from sshd

#psuedo code:
if $1 is in whitelist:
cat /home/$1/.ssh/authorized_keys
exit 0
else
exit 1