必须将用户shell设为/usr/sbin/nologin并配置denyusers,才能禁用ssh和远程桌面登录而保留本地tty登录;需验证第七列值、确认nologin路径存在,并避免使用/bin/false。

要让指定账户无法通过SSH或远程桌面登录,仅允许在物理机前用键盘鼠标直接登录,必须切断所有远程认证通道并保留本地TTY会话能力。
修改用户默认Shell为/sbin/nologin
这一步直接阻断所有需要分配交互式Shell的登录方式,包括SSH、SFTP、Telnet、远程桌面后台进程,但不影响本地Ctrl+Alt+F1~F6虚拟终端的登录流程。
执行命令确认系统中nologin的实际路径:ls -l /sbin/nologin /usr/sbin/nologin 2>/dev/null。银河麒麟V10 SP3默认使用/usr/sbin/nologin,若该路径存在则优先选用它。
运行sudo usermod -s /usr/sbin/nologin username,将username替换为实际要限制的账户名。
【必须验证第七列】执行getent passwd username | cut -d: -f7,输出必须是/usr/sbin/nologin,否则限制不生效。
确保本地TTY登录仍可用
修改Shell后,本地控制台(Ctrl+Alt+F1~F6)仍可登录,因为Linux内核级TTY登录不依赖PAM分配Shell,而是由login程序直接调用用户指定shell——而/usr/sbin/nologin本身会检测是否来自tty,是则显示提示并退出,但不会阻止登录流程继续;非tty(如SSH)则立即拒绝。
测试方法:切换到任意本地虚拟终端(如Ctrl+Alt+F2),输入用户名后回车,此时应看到“This account is currently not available.”提示,然后自动返回登录界面——这说明限制已生效且本地入口未被破坏。
注意:不要用/bin/false替代,它不读取/etc/nologin.txt,也无法区分tty与网络登录场景。
禁用该账户的SSH访问权限
方法一:在/etc/ssh/sshd_config末尾添加DenyUsers username,保存后执行sudo systemctl restart sshd。
方法二:更精准地只封远程通道,保留本机SSH(如localhost)可用,添加DenyUsers username@*——星号通配所有IP,但不匹配空地址(即localhost)。
执行sudo grep -n "DenyUsers" /etc/ssh/sshd_config确认规则未被重复写入,避免配置冲突导致sshd启动失败。











