ssh配置内置sftp并使用密钥对登录

1、密钥对登录配置

首先要在登录主机(192.168.1.111)上生成密钥对

复制代码
ssh-keygen  -t rsa -b 2048

生成公钥和私钥,.pub结尾的文件即为公钥

如果要登录要远程主机(192.168.1.112)上需要讲本机(192.168.1.111)的id_rsa.pub内容复制到目标主机上

1)如果有远程主机的登录用户密码直接使用如下命令传输即可(root就用root用户,普通用户登录就用普通用户

复制代码
ssh-copy-id -i  id_rsa.pub  root@192.168.1.112

2)手动复制方式:如果配置root用户的免密码登录,就需要在root家目录中进入.ssh文件夹创建authorized.keys文件,并写入生成的公钥内容,如果配置的是其他用户的免密码登录,就需要在其他用户家目录中的.ssh文件夹中创建authorized.keys文件,并将生成的公钥内容写入。

复制代码
root用户:
本机操作(192.168.1.111)
scp /root/.ssh/id_rsa.pub root@192.168.1.112:/root/.ssh/authorized_keys

chmod 600 authorized_keys

chmod 700 ~/.ssh

普通用户:
在远程主机(192.168.1.112)上添加sftp普通用户
useradd ftpuser -d /home/ftpuser -s /sbin/nologin
回到本机(192.168.1.111)
scp /root/.ssh/id_rsa.pub ftpuser@192.168.1.112:/home/ftpuser/.ssh/authorized_keys

chmod 600 authorized_keys

chmod 700 ~/.ssh
chown -R ftpuser:ftpuser  /home/ftpuser/.ssh

同理如果想配置其他用户实现密钥登录,则将公钥文件拷贝到用户家目录的.ssh里面的authorize_keys文件中即可

普通用户注意authorize_keys文件的所属

2、ssh中配置使用内置的sftp的配置

修改远程主机(192.168.1.112)的ssh配置

复制代码
 vim /etc/ssh/sshd_config



PubkeyAuthentication yes   #配置密钥登录

Subsystem sftp internal-sftp  #启用ssh内置的sftp



Match LocalPort 20022  #匹配连接端口,这里也可以配置匹配用户  user XXX

        AuthenticationMethods publickey    #连接方式密钥链接或者password密钥连接

        ChrootDirectory /home/ftptest      # 限制连接后的查看目录,无法使用上级或其他目录

        ForceCommand internal-sftp        #使用ssh的内置sftp

        AllowTcpForwarding no

        X11Forwarding no

        PermitTunnel no

Match 必须出现在 sshd_config 文件末尾(或全局配置之后),且每个 Match 块只能包含被明确允许的配置指令(如 PasswordAuthentication、ForceCommand、MaxAuthTries 等),不能重复定义非策略类参数(如 Port 或 ListenAddress)。

3、目录权限配置(192.168.1.112)

复制代码
创建目录

Mkdir /home/ftpuser

设置目录所有权

Chown root:ftpuser  /home/ftpuser

确保目录不可写

Chmod 755 /home/ftpuser

创建用户实际可写子目录

Mkdir /home/ftpuser/upload

Chown ftpuser:ftpuser   /home/ftpuser/upload



Systemctl restart sshd

重启之后连接远程主机即可

目录权限一定要配置,否则match配置无法生效

如果目录权限不进行配置的话,远程连接就会报如下的错误

SFTP(SSH File Transfer Protocol)作为安全文件传输的标准协议,常用于企业内部或对外提供文件服务。然而,默认情况下,SFTP用户登录后可浏览其家目录以外的路径(取决于shell权限),存在信息泄露风险。因此,限制SFTP用户仅能访问指定目录成为系统安全管理的关键环节。

实现该目标的核心机制是利用OpenSSH中的 ChrootDirectory 指令,将用户"锁定"在特定根目录中,形成类似容器化的隔离环境。此功能依赖于严格的文件系统权限控制和配置逻辑,否则极易因权限不当导致登录失败或安全警告。

常见的误区包括:

  • 将 chroot 目录设为用户可写,违反 SSH 安全策略
  • SubSystem sftp internal-sftp 未正确放置,导致 Match 块不生效
  • 用户主目录归属错误,引发启动子系统失败
  • 未使用 ForceCommand 或配置顺序错误,使限制被绕过

核心配置指令解析

指令 作用说明 典型值示例
ChrootDirectory 设定用户的根目录(chroot jail),必须由 root 拥有且不可写 /sftp/%u
ForceCommand 强制执行命令,通常配合 internal-sftp 使用 internal-sftp
Match User/Group 条件匹配块,针对特定用户或组应用规则 Match User sftpuser
AllowTcpForwarding 禁止端口转发增强安全性 no
X11Forwarding 关闭图形转发以减少攻击面 no
相关推荐
晚风叙码16 分钟前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
Z21-X25 分钟前
云原生运维笔记:硬核拆解OpenStack计算与存储——从主机聚合到Cinder挂载全流程
运维·笔记·学习·云原生·openstack
开开心心就好30 分钟前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
一只鹿鹿鹿1 小时前
医院绩效管理体系方案
大数据·运维·安全·web安全·制造
java_logo1 小时前
Docker 部署 Portainer CE 中文版:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer ce
山东孙燕姿1 小时前
前端框架升级:不敢动的组件怎么办
大数据·运维·服务器·网络·人工智能·前端框架
古法老登瞎折腾9 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
琥珀.9 小时前
mysql中json数组转列表查询
linux·运维·服务器
dawnsky.liu10 小时前
在 RHEL 中使用 goose 实现远程主机管理
linux·运维·ai
Linux运维技术栈12 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维