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
相关推荐
乘云数字DATABUFF7 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者2 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql