docker 部署 sftp

部署

1)配置 users.conf

规则:

ruby 复制代码
<username>:<passwd>:<用户id>:<用户组id>:<用户子目录>

用户子目录说明:

假设用户名为:sftpUser

  1. 用户目录:/home/sftpUser 目录的权限默认所属为 root:root;并且其他用户以及用户组只有读和执行的权限

2)当使用 sftpUser 用户登录后;默认进入的目录是 /home/sftpUser;但是 atmoz/sftp 的 chroot 会把 /home/sftpUser 当作"虚拟根目录" /

3)所以当 / 目录下没有任何目录的时候,就会出现创建目录也创建不了

users.conf 示例:

ruby 复制代码
# sftp 的用户名为:sftpUser; 密码为: 8ff$hk90NM4@oyF;
# 中间的 :: 点,没有写;就是让系统自己去分配
# 用户子目录为 upload
sftpUser:8ff$hk90NM4@oyF:::upload
sftpUser2:8ff$hk90NM4@oyF:::upload

2) 运行 sftp 容器

/app/docker/sftp/users.conf:这个 users.conf 是让 sftp 在初始化的时候创建用户

/app/docker/sftp/upload:这个是 映射的 sftp 的/home 的目录,sftp 存储都是在用户目录下,所以这里映射着所有上传的文件

bash 复制代码
docker run \
  -v /app/docker/sftp/conf/users.conf:/etc/sftp/users.conf:ro \
  -v /app/docker/sftp/upload:/home \
  -p 2222:22 -d atmoz/sftp

上传目录说明

sftpUser:8ff$hk90NM4@oyF:::upload 用户子目录为 upload ;实际目录为 /home/sftpUser/upload

那么程序上传的路径就要配置为 /upload

atmoz/sftp 的 chroot 会把 /home/sftpUser当作"虚拟根目录" /;使用 sftpUser 账号登录后当然只看到 /upload 目录

验证方式:

yaml 复制代码
# sftpUser 为对应的用户名
sftp -P 2222 sftpUser@<host-ip>

测试上传

远程上传地址从 /upload 开始,因为 用户子目录为 upload(实际路径:/home/sftpUser/upload)

ini 复制代码
import paramiko

def sftp_upload(local_path, remote_path, host, port, username, password):
    # 创建SSH客户端
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 连接服务器
        ssh.connect(hostname=host, port=port, username=username, password=password)
        
        # 创建SFTP客户端
        sftp = ssh.open_sftp()
        
        # 上传文件
        sftp.put(local_path, remote_path)
        print(f"文件上传成功: {local_path} -> {remote_path}")
        
    except Exception as e:
        print(f"上传失败: {e}")
    finally:
        # 关闭连接
        if 'sftp' in locals():
            sftp.close()
        ssh.close()

# 使用示例
if __name__ == "__main__":
    # 配置信息
    host = "你的ip"
    port = 2222
    username = "sftpUser"
    password = "8ff$hk90NM4@oyF"
    
    # 文件路径
    local_file = "E://1.txt"
    # sftp 存储位置
    remote_file = "/upload/1.txt"
    
    # 执行上传
    sftp_upload(local_file, remote_file, host, port, username, password)

执行后:

相关推荐
java_logo30 分钟前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机
小杨爱科普1 小时前
制造业上自动化改造,改造部分的专利到底归谁
运维·经验分享·自动化
方便面不加香菜3 小时前
Docker Container --容器及容器的操作案例详解
运维·docker·容器
AR-26710-6 小时前
Linux Day32——实操五类资源告急排查
linux·运维
skywalk81637 小时前
hive 常驻集群:像 OSPF 一样在线,像 git 一样可信
运维·人工智能·hive
景煜拾年8 小时前
InnoAI SQL 助手
运维·数据库·笔记·sql
无人生还别怕9 小时前
如何搭建docker仓库(轻量级)registry
linux·运维·docker·云原生·容器·registry·openanolisos
分布式存储与RustFS9 小时前
Hudi 表想摆脱 HDFS 绑定?用 Spark + Hudi 直接写进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
zhengfei61110 小时前
CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡
linux·运维·tcp/ip
逐流人10 小时前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops