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

 更新时间:2025年06月27日 14:14:57   作者:weixin_44585288  
这篇文章主要介绍了Docker部署常见应用之SFTP服务器,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

简介

atmoz/sftp 是一个基于 Docker 的 SFTP 服务镜像,它使用 OpenSSH 来提供 SFTP 服务。

这个镜像支持创建单个或多个用户的 SFTP 访问,并允许用户通过 SFTP 协议安全地共享文件。

它是一个轻量级的解决方案,可以快速部署 SFTP 服务器.使用时,可以通过 Docker 命令行参数来指定 SFTP 用户名、密码和上传目录等配置。

Dockers部署

单用户

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

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

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

sudo docker pull atmoz/sftp

创建文件挂载目录

sudo mkdir /data/docker/atmoz/upload

启动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服务器运行。

下面是命令各部分的解释:

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

  • 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服务器

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

sftp -P 2222 foo@atmoz-sftp-server-ip

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

多用户

创建配置文件

/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

启动容器

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 目录。 此处不能自定义目录, 自定义目录无法登录。

用户信息加密

crypt加密

命令行运行以下命令, 对密码加密,

python -c "import crypt; print(crypt.crypt('YOUR_PASSWORD'))"

这里YOUR_PASSWORD替换为你的密码

启动容器

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密钥认证

生成密钥

  • 以下命令生成密钥
# 密钥存放创建目录
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
  • 生成密钥时需要输入密码,这个密码用于保护私钥文件。

启动容器

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。

连接到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替换为实际的私钥文件路径。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker中进行线上问题排查常用的19个命令

    Docker中进行线上问题排查常用的19个命令

    这篇文章主要为大家详细介绍了19个Docker线上问题排查的常用命令和工具,掌握这些命令和工具都能显著提升你的问题排查效率,快跟随小编一起学习一下吧
    2025-05-05
  • docker python如何实现打包的方法

    docker python如何实现打包的方法

    这篇文章主要介绍了docker 打包python实现方法的相关资料,这里说明如今实现,需要的朋友可以参考下
    2016-12-12
  • 详解Docker挂载本地目录

    详解Docker挂载本地目录

    这篇文章主要介绍了详解Docker挂载本地目录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Docker中Nginx反向代理的实现步骤

    Docker中Nginx反向代理的实现步骤

    为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号,本文主要介绍了Docker中Nginx反向代理的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • docker数据卷容器挂载不上的解决方法

    docker数据卷容器挂载不上的解决方法

    docker容器之间可以通过相互挂载实现数据共享,本文主要介绍了docker数据卷容器挂载不上的解决方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • docker目录和本地目录互通的实现

    docker目录和本地目录互通的实现

    本文介绍了如何实现Docker目录和本地目录互通,通过这种方式,可以轻松地在Docker容器和本地文件系统之间共享数据,感兴趣的可以了解一下
    2023-08-08
  • 聊聊docker跨主机之间容器通信问题

    聊聊docker跨主机之间容器通信问题

    这篇文章主要介绍了docker跨主机之间容器通信问题,创建网桥之后,使用ifconfig查看会多出一个网桥,该网桥在docker启动或者重启之后,会自动显示出来,具体实践跟随小编一起看看吧
    2022-05-05
  • docker 容器网络模式详解

    docker 容器网络模式详解

    这篇文章主要为大家介绍了docker 容器网络模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 阿里云esc服务器Docker部署单节点Mysql的讲解

    阿里云esc服务器Docker部署单节点Mysql的讲解

    今天小编就为大家分享一篇关于阿里云esc服务器Docker部署单节点Mysql的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • docker容器commit打包越来越大的原因分析及解决

    docker容器commit打包越来越大的原因分析及解决

    文章介绍了Docker容器打包变大的原因,并提供了解决方法,具体步骤包括使用export命令导出容器,然后使用import命令导入镜像,最后将镜像展开成容器,这种方法可以有效减少镜像文件的大小,避免因Docker镜像层的概念导致的文件膨胀问题
    2025-03-03

最新评论