You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:10:38