欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【linux知识】sftp配置免密文件推送

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

2025/11/19 8:48:59 来源:https://blog.csdn.net/wendao76/article/details/148150345  浏览:    关键词:【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 用户的安全配置及免密文件推送功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词