您的位置:首页 > 运维架构 > Docker

使用Docker快速搭建sftp服务

2017-11-10 15:48 1556 查看
环境:
docker环境

如果是centos7系统,没有安装docker,直接使用以下命令安装
yum -y install docker
systemctl start docker.service
镜像拉取:
PS:不拉取也可以,在docker run的时候检测到没有镜像会自动拉取

docker pull docker.io/atmoz/sftp
最简单的使用docker搭建sftp实例:
docker run -p 22:22 -d atmoz/sftp foo:pass:::upload
执行以上命令后,会在容器里面创建foo用户,密码为pass,此时登录sftp服务器后,可以看到upload文件夹,上传的文件会保存到容器里面的/home/foo/upload目录里面。

通过以上命令构建的sftp容器,用户上传的文件是存放在容器里面的,如果容器被误删除,那么文件也将会丢失,通过下面的方式,可以把本地的文件系统,共享到容器内,这样上传的文件就会在主机上就能看到的到了。就算容器被删除,上传的文件也不会丢失。

共享本地目录到容器
docker run \
-v /host/upload:/home/foo/upload \
-p 2222:22 -d atmoz/sftp \
foo:pass:1001
-------------------------我是分割线------------------------------------
OpenSSH服务器默认在端口22上运行,在本例中,我们将容器的端口22转发到主机的端口2222
要使用OpenSSH客户端登录,请运行:sftp -P 2222 foo @ <host-ip>
PS.1 如果本地不存在/host/uplaod会自动创建

PS.2 登录会看到upload文件夹,如果没有写入权限,将宿主机上的/host/upload文件夹授权777即可
PS.3 如果还是无法写入文件,请检查selinux是否关闭

以上都是只在容器里面创建了foo这一个用户,如果有多个用户需要登录sftp,怎么办呢?请看下面的示例:

docker run \
-v /host/users.conf:/etc/sftp/users.conf:ro \
-v mySftpVolume:/home \
-p 3333:22 -d atmoz/sftp
PS.1 第一个-v将本地的/host/users.conf映射到容器的/etc/sftp/users.conf,并且在容器内为只读
/host/users.conf文件内容如下:
foo:123:1001:100
bar:abc:1002:100
baz:xyz:1003:100
user:pass:uid:gid
PS.2 第二个 -v将mySftpVolume映射到容器内的/home
PS.3 登录后,写入文件会无法写入,需要把本地映射到容器的目录里面的用户名文件夹授权为777

查看本地的哪个目录映射到容器使用
docker inspect CONTAINER_ID

使用秘钥认证登录

首先需要得到要登录机器的公钥,如果没有可以使用ssh-keygen生成。
docker run \
-v /host/id_rsa.pub:/home/foo/.ssh/keys/id_rsa.pub:ro \
-v /host/share:/home/foo/share \
-p 4444:22 -d atmoz/sftp \
foo::1001
以上命令会将公钥文件/host/id_rsa.pub映射到容器内,并且容器会自动把这个公钥加入foo用户.ssh/authorized_keys 文件
ps.1 需要将本地的/host/share目录权限设置为777

ps.2 登录时使用foo用户加上私钥登录即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker sftp