Docker部署常见应用之SFTP服务器

文章目录

简介

atmoz/sftp 是一个基于 Docker 的 SFTP 服务镜像,它使用 OpenSSH 来提供 SFTP 服务。这个镜像支持创建单个或多个用户的 SFTP 访问,并允许用户通过 SFTP 协议安全地共享文件。它是一个轻量级的解决方案,可以快速部署 SFTP 服务器.使用时,可以通过 Docker 命令行参数来指定 SFTP 用户名、密码和上传目录等配置。

Dockers部署

单用户

以下是使用Docker部署atmoz/sftp服务的一般步骤:

  1. 安装Docker:确保你的系统上已经安装了Docker。

  2. 拉取Docker镜像 :使用以下命令从Docker Hub拉取atmoz/sftp镜像:

    sh 复制代码
    sudo docker pull atmoz/sftp
  3. 创建文件挂载目录

    sh 复制代码
    sudo mkdir /data/docker/atmoz/upload
  4. 启动Docker容器

    使用以下命令启动SFTP服务器,允许用户foo通过密码pass访问,并且可以操作宿主机上/data/atmoz/upload目录中的内容。同时,SFTP服务将在后台运行,并且可以通过宿主机的2222端口进行访问。:

    sh 复制代码
    sudo docker run \
     -d \
     --name atmoz-sftp-server \
     -p 2222:22 \
     -v /data/docker/atmoz/upload:/home/foo/upload \
     atmoz/sftp foo:pass:1001

    这条docker run命令是用来启动一个名为atmoz/sftp的Docker容器,它将作为一个SFTP服务器运行。下面是命令各部分的解释:

    • docker run: Docker命令,用于创建并启动一个新的容器实例。

    • -d: 表示以"detached"模式运行容器,即在后台运行。

    • --name atmoz-sftp-server: 指定容器的名称为atmoz-sftp-server

    • -p 2222:22: 端口映射参数,将容器内部的22端口映射到宿主机的2222端口。这样,外部可以通过宿主机的2222端口来访问容器内的SFTP服务。

    • -v /data/atmoz/upload:/home/foo/upload: 卷挂载参数,将宿主机的/data/atmoz/upload目录挂载到容器内的/home/foo/upload目录。这允许SFTP用户foo访问和操作宿主机上指定的目录。

    • atmoz/sftp: 指定要运行的Docker镜像名称。

    • foo:pass:1001: 这是传递给容器的参数,用于设置SFTP用户的信息。格式通常为用户名:密码:UID。在这个例子中:

      • foo是SFTP用户的用户名。
      • pass是该用户的密码。
      • 1001是该用户的用户ID(UID),在Linux系统中用于标识用户。

    综上所述,这条命令的作用是启动一个SFTP服务器,允许用户foo通过密码pass访问,并且可以操作宿主机上/data/atmoz/upload目录中的内容。同时,SFTP服务将在后台运行,并且可以通过宿主机的2222端口进行访问。

  5. 连接到SFTP服务器

    使用SFTP客户端连接到你的SFTP服务器。例如,使用命令行工具sftp

    sh 复制代码
    sftp -P 2222 foo@atmoz-sftp-server-ip
    • 这里atmoz-sftp-server-ip 容器所在服务器的IP地址。密码为pass

多用户

  1. 创建配置文件

    /data/atmoz/conf 目录下创建配置文件user.sconf

    • 创建配置文件目录

      sh 复制代码
      sudo mkdir /data/docker/atmoz/conf
    • 创建users.conf文件, 增加下面内容:

      sh 复制代码
      foo:123:1001:100
      bar:abc:1002:100
      baz:xyz:1003:100
  2. 启动容器

    sh 复制代码
    sudo docker run \
     -d \
     --name atmoz-sftp-server \
     --privileged=true \
     -p 2222:22 \
     -v mySftpVolume:/home \
     -v /data/docker/atmoz/config/users.conf:/etc/sftp/users.conf:ro \
     atmoz/sftp
    • 注意 -v mySftpVolume:/home 会在自动生成mySftpVolume 目录。 此处不能自定义目录, 自定义目录无法登录。

用户信息加密

  1. crypt加密
    命令行运行以下命令, 对密码加密,

    sh 复制代码
    python -c "import crypt; print(crypt.crypt('YOUR_PASSWORD'))"
    • 这里YOUR_PASSWORD替换为你的密码
  2. 启动容器

    sh 复制代码
    sudo docker run \
      -d \
      --name atmoz-sftp-server \
      -p 2222:22 \
      -v /data/docker/atmoz/upload:/home/foo/upload \
      atmoz/sftp \
      'foo:<encrypted-password>:e:1001'

    <encrypted-password>替换为加密后的密码。
    注意: :e 表示前面为加密密码, 同时'<user>:<encrypted-password>:e:1001'要用单引号括起来。

使用SSH密钥认证

  1. 生成密钥
    以下命令生成密钥

    shell 复制代码
    # 密钥存放创建目录
    sudo mkdir -p /data/docker/atmoz/ssh
    # 生成密钥
    sudo ssh-keygen -t rsa -b 4096 -f /data/docker/atmoz/ssh/my_rsa_key
    • 使用ssh-keygen命令生成了一个4096位的RSA密钥对,密钥文件将被存储在/data/docker/atmoz/ssh/my_rsa_key
    • 生成密钥时需要输入密码,这个密码用于保护私钥文件。
  2. 启动容器

    sh 复制代码
    sudo docker run \
      -d \
      --name atmoz-sftp-server \
      -p 2222:22 \
      -v /data/docker/atmoz/ssh/my_rsa_key.pub:/home/foo/.ssh/keys/my_rsa_key.pub:ro \
      -v /data/docker/atmoz/upload:/home/foo/upload \
      atmoz/sftp \
      foo::1001
    • 使用docker run命令启动了一个名为atmoz-sftp-server的容器,映射了容器的22端口到宿主机的2222端口。
    • 将公钥文件挂载到容器内的/home/foo/.ssh/keys/my_rsa_key.pub路径,这样容器就可以使用这个公钥来验证客户端的私钥。
    • 还挂载了宿主机的/data/docker/atmoz/upload目录到容器的/home/foo/upload目录,用于文件的上传和下载。
    • atmoz/sftp是使用的Docker镜像名称,foo::1001是指定的SFTP用户及其所属组ID。
  3. 连接到SFTP服务器

    sh 复制代码
    sftp -i /path/to/your/private_key -P 2222 foo@atmoz-sftp-server-ip
    • 使用sftp命令登录到SFTP服务器,-i选项指定了私钥文件的路径,foo是SFTP服务器上的用户名,atmoz-sftp-server-ip是容器所在服务器的IP地址。
    • 需要将/path/to/your/private_key替换为实际的私钥文件路径。

参考文章

github atmoz/sftp

相关推荐
群联云防护小杜15 分钟前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡
PyAIGCMaster37 分钟前
ubuntu装P104驱动
linux·运维·ubuntu
奈何不吃鱼37 分钟前
【Linux】ubuntu依赖安装的各种问题汇总
linux·运维·服务器
aherhuo42 分钟前
kubevirt网络
linux·云原生·容器·kubernetes
zzzhpzhpzzz1 小时前
Ubuntu如何查看硬件型号
linux·运维·ubuntu
蜜獾云1 小时前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
陌北v11 小时前
Docker Compose 配置指南
运维·docker·容器·docker-compose
只会copy的搬运工1 小时前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
catoop1 小时前
K8s 无头服务(Headless Service)
云原生·容器·kubernetes
娶不到胡一菲的汪大东2 小时前
Ubuntu概述
linux·运维·ubuntu