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

2024-06-15 20:52

本文主要是介绍Docker部署常见应用之SFTP服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 简介
    • Dockers部署
      • 单用户
      • 多用户
      • 用户信息加密
      • 使用SSH密钥认证
    • 参考文章

在这里插入图片描述

简介

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

Dockers部署

单用户

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

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

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

    sudo docker pull atmoz/sftp
    
  3. 创建文件挂载目录

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

    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

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

多用户

  1. 创建配置文件

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

    • 创建配置文件目录
      sudo mkdir /data/docker/atmoz/conf
      
    • 创建users.conf文件, 增加下面内容:
      foo:123:1001:100
      bar:abc:1002:100
      baz:xyz:1003:100
      
  2. 启动容器

    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加密
    命令行运行以下命令, 对密码加密,
    python -c "import crypt; print(crypt.crypt('YOUR_PASSWORD'))"
    
    • 这里YOUR_PASSWORD替换为你的密码
  2. 启动容器
    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. 生成密钥
    以下命令生成密钥
    # 密钥存放创建目录
    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. 启动容器
    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服务器
    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

这篇关于Docker部署常见应用之SFTP服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064552

相关文章

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi