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
相关推荐
盘古信息IMS1 小时前
盘古信息 MES:赋能电子制造精益生产,实现排程、物料、质量一体化精准管控
大数据·运维·制造
2501_912784081 小时前
技术深度解析:Taocarts 跨境独立站系统 —— 反向海淘全链路架构设计与自动化实现
运维·自动化·独立站·taocarts
勤自省2 小时前
ROS2从入门到“重启解决”:21讲8~12章踩坑血泪史与核心总结
linux·开发语言·ubuntu·ssh·ros
原来是猿2 小时前
Linux守护进程(Daemon)完全指南:从原理到实战
linux·运维·服务器·网络·php
阡陌..2 小时前
如何使用samba为Linux设置一个局域网共享盘
linux·运维·服务器
晴夏。2 小时前
UE5 motion warping 运动扭曲的用途
运维·ue5
霞姐聊IT3 小时前
三大并发技术—进程、线程和协程
linux·运维·网络·操作系统