![将 LDAP 中的 SSH 用户限制为只能在 SSH 堡垒机上执行一个命令](https://linux22.com/image/668661/%E5%B0%86%20LDAP%20%E4%B8%AD%E7%9A%84%20SSH%20%E7%94%A8%E6%88%B7%E9%99%90%E5%88%B6%E4%B8%BA%E5%8F%AA%E8%83%BD%E5%9C%A8%20SSH%20%E5%A0%A1%E5%9E%92%E6%9C%BA%E4%B8%8A%E6%89%A7%E8%A1%8C%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4.png)
我有一个 Centos 7 服务器的私有网络。每台服务器只能通过 SSH 堡垒机访问。此外,所有这些服务器都使用 SSSD 根据 LDAP 目录验证 SSH 用户的密钥。
由于密钥是根据 LDAP 目录进行验证的,因此不存在标准文件。二进制文件authorized_keys
不是通过标准文件,而是通过管道将针对 LDAP 的查询格式化为文件——但实际上不是文件。因此,据我所知,通过将 RSA 密钥绑定到条目来限制用户只能执行特定命令是不可能的。authorized_keys
/usr/bin/sss_ssh_authorizedkeys
sshd
authorized_keys
commands=" ... "
SSH 用户可以使用以下命令通过堡垒机对其工作站进行身份验证:
ssh -A -l [email protected] joes.workstation.ip -o ProxyCommand="ssh -l [email protected] -q bastion.ip nc joes.workstation.ip %p"
不幸的是,他们还能够通过 SSH 进入堡垒服务器上的会话,我不希望他们能够这样做。
我是否可以使用我当前的工具(SSSD、SSHD、LDAP 目录)来允许 SSH 用户通过堡垒,但不允许进入堡垒?
答案1
sssd
当我遇到这个问题时,允许您按组设置配置的版本仍在开发中。
我最终在指令下添加了一个ForceCommand
条目,以及一个指令:sshd_config
Match
AcceptEnv
Match Group [email protected]
AcceptEnv SomeVariable
AcceptEnv SomeOtherVariable
ForceCommand /path/to/some/script/I/wrote
然后,在 shell 脚本中,我使用 ssh 客户端传递的变量来执行一些操作。
例如,如果客户端调用这个:
$ SomeVariable=foo ssh -i path/to/key -l [email protected] -o SendEnv=SomeVariable bastion.server
该脚本将可以访问环境变量SomeVariable
;使用您喜欢的任何语言访问它,并使用它来采取一些操作。
确保您的脚本不会退出到堡垒上的 shell 会话。