文章目录
- 简介
- Dockers部署
- 单用户
- 多用户
- 用户信息加密
- 使用SSH密钥认证
- 参考文章
简介
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服务器运行。下面是命令各部分的解释:-
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端口进行访问。 -
-
连接到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
替换为实际的私钥文件路径。
- 使用
参考文章
github atmoz/sftp