有没有更好的方法(最好没有额外的软件堆栈)将特定的 ssh 用户锁定到程序中而无需访问工作 shell?想象一个 cli 程序,它应该是用户可以通过 ssh 访问的唯一界面。
我的黑客解决方案:
在/etc/密码使用以下脚本替换用户 shell:
#!/bin/bash
/bin/bash -c /usr/bin/cli
exit 1
答案1
手头上的问题
您希望在远程用户连接到您的服务器时锁定他们使用特定的 shell。正如您可能已经发现的那样,chsh
或者其他解决方案是针对本地用户的。
解决方案
按照用户 muru 的解决方案,我会编辑您sshd_config
以使用该ForceCommand
选项。
您可以将 ForceCommand 与 Match 一起使用:
Match Address 10.1.0.0/16 ForceCommand /usr/bin/[some shell]
来自 man sshd_config:
Match Introduces a conditional block. ...
Match 的参数是一个或多个条件模式对或匹配所有条件的单个标记 All。可用条件包括用户、组、主机、本地地址、本地端口和地址。
ForceCommand
强制执行由 ForceCommand 指定的命令,忽略客户端和 ~/.ssh/rc(如果存在)提供的任何命令。该命令是通过使用用户的登录 shell 和 -c 选项来调用的。
因此,您指定的命令将使用用户的登录 shell 执行,该 shell 必须接受 -c 选项。当命令退出时连接就会关闭,因此出于所有实际目的,该命令就是它们的 shell。
在配置文件中使用,ForceCommand
您可以强制使用支持该选项的 shell -c
。我也想参考一下这个服务器故障帖子获取有关如何完成此任务的更多信息。
结论
使用您的sshd_config
选项强制使用可以支持的 shell,-c
因为完成后将关闭 shell 和会话。
如果您对此答案有任何疑问或疑问,请发表评论。我感谢您提供反馈来纠正任何误解并改进我的帖子。我可以根据需要更新我的答案。
祝你好运!
答案2
您更适合为相关用户创建一个实际的 BSD 监狱或 chroot 环境。当然,这需要手动创建用户、组、迷你 Linux 文件系统,获取cli
等所需的库或使用jail
UNIX 发行版中可用的工具。
请参阅文档以了解更多信息