Linux:限制SSH登录用户仅能访问指定ncurses程序
刚好碰到过类似需求,给你分享几个实用的方案,亲测有效:
方案一:修改用户登录Shell为你的ncurses程序
这是最直接的方式,用户登录后会直接启动你的程序,退出程序就自动断开SSH连接:
- 首先确保你的ncurses程序是可执行的,并且使用绝对路径(比如
/usr/local/bin/my_ncurses_menu),执行命令赋予权限:chmod +x /usr/local/bin/my_ncurses_menu - 把程序路径添加到系统允许的Shell列表里,编辑
/etc/shells文件,在末尾追加一行:/usr/local/bin/my_ncurses_menu,或者直接用命令快速添加:echo "/usr/local/bin/my_ncurses_menu" >> /etc/shells - 修改目标用户的登录Shell,比如用户名为
menu_user,执行:chsh -s /usr/local/bin/my_ncurses_menu menu_user
测试一下:用Putty登录这个用户,应该直接进入你的菜单程序,退出后SSH会话就会自动结束。
方案二:用SSH的ForceCommand强制启动程序
如果不想修改用户的默认Shell(比如用户本地登录还想用bash),可以通过SSH配置强制指定登录后运行的程序:
- 编辑SSH服务配置,推荐在
/etc/ssh/sshd_config.d/目录下新建一个独立配置文件(比如menu_user_restrict.conf),避免修改主配置文件导致全局出错 - 在配置文件里添加针对目标用户的规则:
Match User menu_user ForceCommand /usr/local/bin/my_ncurses_menu # 禁用不必要的SSH功能,提升安全性 AllowTcpForwarding no X11Forwarding no PermitTunnel no
- 重启SSH服务使配置生效:
systemctl restart sshd
这个方式的好处是,用户通过SSH登录时会强制启动你的程序,但如果是本地控制台登录,还是会使用原来的默认Shell。
关键注意事项
- 先测试再上线:建议先创建一个测试用户(比如
test_menu_user),用这个用户验证配置,避免误操作导致自己被锁出服务器 - 终端环境适配:ncurses程序依赖正确的
TERM环境变量,Putty默认的TERM是xterm,如果你的程序显示异常,可以写个简单的Shell脚本包装程序:
#!/bin/bash # 适配Putty的终端环境 export TERM=xterm-256color # 用exec替换当前Shell,确保退出程序后直接断开连接 exec /usr/local/bin/my_ncurses_menu
然后把这个脚本(比如/usr/local/bin/start_menu.sh)设置为登录Shell或者ForceCommand的目标,记得给脚本加执行权限:chmod +x /usr/local/bin/start_menu.sh
- 权限安全:把你的ncurses程序和包装脚本的所有者设为
root,权限设为755,比如chown root:root /usr/local/bin/my_ncurses_menu,防止用户篡改程序内容
内容的提问来源于stack exchange,提问作者mywarthog
相关产品推荐
相关产品推荐

