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
相关推荐
智能运维指南1 小时前
代码管理软件如何融入 DevOps 工具链?全链路联通的 5 个关键点
运维·devops·信创适配·嘉为蓝鲸
充电zcx2 小时前
Linux:4:开发工具详解
linux·运维·服务器
gongfeng30006 小时前
福州企业级AI自动化获客解决方案品牌梳理与适用场景分析
运维·人工智能·自动化·g-claw ai员工
光电笑映7 小时前
网络通信基础:从协议分层到 Socket 编程预备
linux·运维·服务器·网络
微小冷8 小时前
用Mermaid画时序图
运维·流程图·时序图·mermaid·生命线
其实防守也摸鱼8 小时前
Codex 下载与本地部署实战:从安装到运行全指南
android·大数据·运维·安全·自动化
wdfk_prog8 小时前
ROS教程07:从 ros::start() 顺着源码读懂 Master、XML-RPC 与 Topic 注册发现
运维·缓存·docker·容器·ros
吴声子夜歌8 小时前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
倔强的石头10610 小时前
【Linux指南】动静态库系列(八):ELF 加载与进程地址空间:程序还没运行,为什么已经有地址
linux·运维
两点王爷10 小时前
常用的 Docker 镜像拉取地址仓库及常用命令详解
运维·服务器·容器