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

如何在同一服务器上配置允许root用户同时使用SFTP和SSH登录

如何在同一服务器上配置允许root用户同时使用SFTP和SSH登录

我来帮你解决这个问题——你的核心矛盾在于ForceCommand internal-sftp会强制root用户的所有连接都只能走SFTP服务,直接阻断了SSH shell登录的路径。下面给你两种解决方案,分别对应不同的需求场景:

方案一:保留对root的SFTP安全限制,同时允许SSH登录

如果需要给root的SFTP做一些限制(比如禁止端口转发),同时保留SSH登录权限,可以这么配置:

  1. 编辑/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本身拥有整个系统的权限,如果不需要这个设置,可以直接删掉这一行)

  2. 检查根目录权限
    ChrootDirectory要求目标目录必须是root用户/组所有,且不能开放写入权限给其他用户,执行以下命令确保符合要求:

chown root:root /
chmod 755 /
  1. 重启sshd服务
    根据你的系统类型执行对应的重启命令:
# 适用于systemd系统(如Ubuntu 16.04+/CentOS 7+)
systemctl restart sshd

# 适用于SysVinit系统
service ssh restart

方案二:无需额外限制,直接允许root同时使用SSH和SFTP

如果不需要对root的SFTP做任何特殊限制,配置会更简单:

  1. 打开/etc/ssh/sshd_config,确保以下两行存在且未被注释:
    PermitRootLogin yes
    Subsystem sftp internal-sftp
    
  2. 删除针对root用户的Match块(如果有的话),然后重启sshd服务即可。

关于你遇到的SFTP连接报错

你之前去掉ForceCommand后SFTP连接失败,主要是因为使用了传统的sftp-server,结合ChrootDirectory时容易出现环境依赖问题,切换为内置的internal-sftp就能解决这个问题。另外你看到的主机密钥警告,只是本地~/.ssh/known_hosts文件中缓存的IP和主机名密钥不一致,不影响实际功能,你可以选择删除该文件中对应的行来消除警告。

备注:内容来源于stack exchange,提问作者Baffer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:19:32