如何在同一服务器上配置允许root用户同时使用SFTP和SSH登录
如何在同一服务器上配置允许root用户同时使用SFTP和SSH登录
我来帮你解决这个问题——你的核心矛盾在于ForceCommand internal-sftp会强制root用户的所有连接都只能走SFTP服务,直接阻断了SSH shell登录的路径。下面给你两种解决方案,分别对应不同的需求场景:
方案一:保留对root的SFTP安全限制,同时允许SSH登录
如果需要给root的SFTP做一些限制(比如禁止端口转发),同时保留SSH登录权限,可以这么配置:
编辑
/etc/ssh/sshd_config文件- 先确保全局的root登录权限已经开启:
PermitRootLogin yes - 将SFTP子系统切换为内置的
internal-sftp(比传统的sftp-server更可靠,不需要依赖Chroot环境中的外部文件):Subsystem sftp internal-sftp - 针对root用户的Match块,删除
ForceCommand internal-sftp这一行,保留其他安全限制:Match user root ChrootDirectory / X11Forwarding no AllowTcpForwarding no # 不要保留ForceCommand相关配置
(注:
ChrootDirectory /对root来说其实和无限制没区别,因为root本身拥有整个系统的权限,如果不需要这个设置,可以直接删掉这一行)- 先确保全局的root登录权限已经开启:
检查根目录权限
ChrootDirectory要求目标目录必须是root用户/组所有,且不能开放写入权限给其他用户,执行以下命令确保符合要求:
chown root:root / chmod 755 /
- 重启sshd服务
根据你的系统类型执行对应的重启命令:
# 适用于systemd系统(如Ubuntu 16.04+/CentOS 7+) systemctl restart sshd # 适用于SysVinit系统 service ssh restart
方案二:无需额外限制,直接允许root同时使用SSH和SFTP
如果不需要对root的SFTP做任何特殊限制,配置会更简单:
- 打开
/etc/ssh/sshd_config,确保以下两行存在且未被注释:PermitRootLogin yes Subsystem sftp internal-sftp - 删除针对root用户的Match块(如果有的话),然后重启sshd服务即可。
关于你遇到的SFTP连接报错
你之前去掉ForceCommand后SFTP连接失败,主要是因为使用了传统的sftp-server,结合ChrootDirectory时容易出现环境依赖问题,切换为内置的internal-sftp就能解决这个问题。另外你看到的主机密钥警告,只是本地~/.ssh/known_hosts文件中缓存的IP和主机名密钥不一致,不影响实际功能,你可以选择删除该文件中对应的行来消除警告。
备注:内容来源于stack exchange,提问作者Baffer
相关产品推荐
相关产品推荐

