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

相关推荐
镜子AI3 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo3 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
螺蛳粉 螺蛳粉5 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
知已难寻6 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning6 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
say_fall6 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii7 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
相思难忘成疾8 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo8 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
时早玖沐8 小时前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent