我希望能够基于外部脚本使用OpenSSH的结果来阻止或允许用户。我看到libssh
有support for callbacks,但是在阅读OpenSSH手册页后,我找不到该功能交给用户的任何地方。
例如,我希望能够维护包含用户名黑名单或白名单的文件,甚至API,并让OpenSSH在身份验证过程中查阅这些列表。
到目前为止,我的想法以及为什么它们不足:
使用sshd_config
:AllowUsers
。这是一个开始,但是由于它不从文件中读取,因此不是动态的。每次都需要更改配置文件,然后重新启动服务。此外,从脚本修改配置文件是危险且可怕的。
使用sshd_config
:AuthorizedKeysCommand
。。不幸的是,尽管这确实允许您指定脚本并根据结果授予访问权限,但并不能允许拒绝访问。如果脚本未返回任何内容,则sshd
继续尝试其他身份验证方法。
使用实现libssh
回调的附加功能重新编译OpenSSH。出于可维护性的明显原因,我宁愿不这样做。
在阅读文档时还有其他方法吗?
答案 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