将LDAP中的SSH用户限制在SSH堡垒中只有一个命令

我有一个Centos 7服务器的专用networking。 每个服务器只能通过SSH堡垒到达。 而且,所有这些服务器都使用SSSD来针对LDAP目录validationSSH用户的密钥。

由于密钥是针对LDAP目录进行身份validation的,因此没有标准的authorized_keys文件。 二进制文件/usr/bin/sss_ssh_authorizedkeys不是通过一个标准的authorized_keys文件来pipe理一个针对LDAP的查询, sshd格式化为一个authorized_keys文件 – 但实际上并不是一个文件。 因此,就我所知,通过将RSA键绑定到commands=" ... "条目来限制用户到特定的命令是不可能的。

SSH用户可以使用以下命令通过堡垒authentication他们的工作站:

 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用户通过堡垒,但不能进入堡垒?

当我遇到这个问题时, sssd的版本允许你在每个组的基础上设置configuration。

我结束了添加一个ForceCommand条目到我的sshd_config下一个Match指令,以及一个AcceptEnv指令:

 Match Group [email protected] AcceptEnv SomeVariable AcceptEnv SomeOtherVariable ForceCommand /path/to/some/script/I/wrote 

然后,在shell脚本中,我使用ssh客户端传递的variables来执行一些操作。

例如,如果客户端调用了这个:

 $ SomeVariable=foo ssh -i path/to/key -l [email protected] -o SendEnv=SomeVariable bastion.server 

该脚本将有权访问一个环境variablesSomeVariable ; 访问它使用任何你喜欢的语言,用它来采取一些行动。

确保你的脚本不会退出到堡垒的shell会话中。