当前位置: 首页 > news >正文

【linux知识】sftp配置免密文件推送

SFTP配置免密文件推送

      • **一、配置 SFTP 用户**
        • **1. 创建系统用户(非登录用户)**
        • **2. 设置用户密码**
        • **3. 创建 SFTP 根目录并设置权限**
        • **4. 配置 SFTP 服务(修改 SSH 配置)**
        • **5. 重启 SSH 服务使配置生效**
      • **二、免密 SFTP 文件推送(基于 SSH 密钥认证)**
        • **1. 生成客户端 SSH 密钥对(在推送端执行)**
        • **2. 上传公钥到 SFTP 服务器(服务端操作)**
        • **3. 测试免密连接(客户端验证)**
        • **4. 自动化文件推送脚本示例(客户端)**
      • **三、常见问题与解决方案**
      • **四、安全注意事项**

以下是 Linux 系统配置 SFTP 用户及免密文件推送的详细步骤,结果以 Markdown 格式呈现:

一、配置 SFTP 用户

1. 创建系统用户(非登录用户)
# 添加用户组(可选,建议创建独立组便于管理)
groupadd sftp-users# 创建用户并指定所属组(-s /sbin/nologin 禁止登录系统)
useradd -d /data/sftp/user1 -g sftp-users -s /sbin/nologin user1
2. 设置用户密码
passwd user1
3. 创建 SFTP 根目录并设置权限
# 创建用户根目录(需与 useradd -d 指定的目录一致)
mkdir -p /data/sftp/user1# 确保目录属主为 root(关键!否则 SFTP 服务可能拒绝访问)
chown root:root /data/sftp/user1
chmod 755 /data/sftp/user1  # 目录权限必须为 755 或更低# 创建用户可写子目录(如上传目录)
mkdir /data/sftp/user1/upload
chown user1:sftp-users /data/sftp/user1/upload  # 设置子目录属主为用户
chmod 755 /data/sftp/user1/upload  # 若需写入权限,改为 755 或 700
4. 配置 SFTP 服务(修改 SSH 配置)
vi /etc/ssh/sshd_config

在文件末尾添加以下内容(启用 Chroot 监狱,限制用户访问范围):

Subsystem sftp /usr/lib/openssh/sftp-server  # 确保该行未被注释Match Group sftp-users  # 匹配用户组ChrootDirectory /data/sftp/%u  # %u 代表用户名,对应 /data/sftp/user1ForceCommand internal-sftp  # 强制使用 SFTPAllowTCPForwarding noX11Forwarding noPermitTunnel noAllowTcpForwarding noChrootDirectory /data/sftp/%uForceCommand internal-sftpAllowTcpForwarding noX11Forwarding no# 可选:限制用户只能访问指定目录(禁止向上访问)# 若需写入权限,需确保 Chroot 目录属主为 root 且权限为 755
5. 重启 SSH 服务使配置生效
systemctl restart sshd

二、免密 SFTP 文件推送(基于 SSH 密钥认证)

1. 生成客户端 SSH 密钥对(在推送端执行)
# 生成 RSA 密钥(默认密钥路径:~/.ssh/id_rsa)
ssh-keygen -t rsa -b 4096 -C "sftp-automation"
  • 按提示完成生成,无需设置密码(实现免密)。
2. 上传公钥到 SFTP 服务器(服务端操作)
# 在服务端创建用户密钥目录(若不存在)
mkdir -p /home/user1/.ssh
chmod 700 /home/user1/.ssh  # 目录权限必须为 700# 将客户端公钥内容写入 authorized_keys 文件
vi /home/user1/.ssh/authorized_keys
# 粘贴客户端 id_rsa.pub 的内容,保存退出chmod 600 /home/user1/.ssh/authorized_keys  # 文件权限必须为 600
chown -R user1:sftp-users /home/user1/.ssh  # 设置属主和属组
3. 测试免密连接(客户端验证)
# 使用 sftp 命令连接(无需输入密码)
sftp user1@server-ip
  • 若成功连接且无密码提示,说明配置成功。
4. 自动化文件推送脚本示例(客户端)
#!/bin/bash
# 定义变量
SFTP_USER="user1"
SFTP_HOST="server-ip"
REMOTE_PATH="/upload"
LOCAL_FILE="/data/local/file.txt"# 使用 sftp 命令批量传输(-b 执行脚本)
(
echo "put $LOCAL_FILE $REMOTE_PATH"
echo "bye"
) | sftp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $SFTP_USER@$SFTP_HOST
  • 参数说明
    • -o StrictHostKeyChecking=no:跳过主机密钥检查(适用于自动化场景,生产环境需谨慎)。
    • UserKnownHostsFile=/dev/null:禁止记录主机密钥。

三、常见问题与解决方案

问题现象可能原因解决方案
无法连接 SFTP 服务SSH 服务未启动或端口被防火墙拦截启动 SSH 服务,开放 22 端口(ufw allow ssh
Chroot 目录权限错误根目录属主非 root 或权限高于 755执行 chown root:root /data/sftp/user1chmod 755 /data/sftp/user1
无法上传文件(权限拒绝)子目录无写入权限修改子目录权限为 755 或 700(如 chmod 755 /upload
免密认证失败公钥未正确添加或权限错误检查 authorized_keys 权限是否为 600,属主是否正确
用户无法访问指定目录Chroot 路径配置错误确保 ChrootDirectory 与用户主目录一致(%u 正确替换)

四、安全注意事项

  1. Chroot 目录权限:根目录必须由 root 所有且权限为 755,否则 SFTP 服务会拒绝访问。
  2. 密钥管理:定期轮换 SSH 密钥,避免公钥泄露导致安全风险。
  3. 用户权限隔离:通过独立用户组(如 sftp-users)管理 SFTP 用户,限制其系统访问权限。
  4. 防火墙配置:确保服务器开放 SSH 端口(默认 22),并限制 SFTP 用户的 IP 访问范围。

通过以上步骤,可实现 Linux 系统中 SFTP 用户的安全配置及免密文件推送功能。

http://www.xdnf.cn/news/585199.html

相关文章:

  • 开搞:第四个微信小程序:图上县志
  • 获取印度股票市场API
  • 关于XILINX的XDC约束文件编写
  • HarmonyOS 鸿蒙应用开发基础:EventHub,优雅解决跨组件通信难题
  • 10.IIC和BH1750
  • 基于单片机的室内采光及可燃气体泄漏报警装置设计
  • SCons构建工具使用指南及示例
  • JAVA SE — 循环与分支和输入输出
  • 有没有开源的企业网盘,是否适合企业使用?
  • 记录:express router,可以让node.js后端文件里的路由分布的更清晰
  • vim以及vi编辑器常用快捷键指令
  • 服务器操作系统调优内核参数(方便查询)
  • 复杂项目中通过使用全局变量解决问题的思维方式
  • 2025中青杯数学建模B题思路+模型+代码
  • 【TTS回顾】CosyVoice 深度解析:基于LLM的TTS模型
  • iOS 直播弹幕功能的实现
  • 前端三件套之html详解
  • DevOps体系之Jmeter
  • java面试每日一背 day2
  • MySQL错误1419(HY000)解决方案:SUPER权限缺失与二进制日志启用冲突的3种处理方式
  • 内存管理子系统学习记录
  • uniapp实现H5、APP、微信小程序播放.m3u8监控视频
  • AVL树的实现
  • 【线段树】P2846 [USACO08NOV] Light Switching G|LG4|普及+
  • 无人机集装箱箱号识别系统准确率如何?能达到多少?
  • 微服务架构中的 RabbitMQ:异步通信与服务解耦(一)
  • Linux探秘:驾驭开源,解锁高性能——基础指令(续集)
  • LeetCode 1340. 跳跃游戏 V(困难)
  • 【Harmony】【鸿蒙】List列表View如果刷新内部的自定义View
  • 力扣HOT100之二叉树: 236. 二叉树的最近公共祖先