rger 发表于 2017-11-13 13:05:56

使用Docker快速搭建sftp服务

环境:
    docker环境

    如果是centos7系统,没有安装docker,直接使用以下命令安装

1
2
yum -y install docker
systemctl start docker.service




镜像拉取:
    PS:不拉取也可以,在docker run的时候检测到没有镜像会自动拉取


1
docker pull docker.io/atmoz/sftp




最简单的使用docker搭建sftp实例:

1
docker run -p 22:22 -d atmoz/sftp foo:pass:::upload




    执行以上命令后,会在容器里面创建foo用户,密码为pass,此时登录sftp服务器后,可以看到upload文件夹,上传的文件会保存到容器里面的/home/foo/upload目录里面。

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

共享本地目录到容器

1
2
3
4
5
6
7
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,怎么办呢?请看下面的示例:


1
2
3
4
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文件内容如下:      

1
2
3
foo:123:1001:100
bar:abc:1002:100
baz:xyz:1003:100




   user:pass:uid:gid
PS.2 第二个 -v将mySftpVolume映射到容器内的/home
PS.3 登录后,写入文件会无法写入,需要把本地映射到容器的目录里面的用户名文件夹授权为777

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

1
docker inspect CONTAINER_ID





使用秘钥认证登录

    首先需要得到要登录机器的公钥,如果没有可以使用ssh-keygen生成。

1
2
3
4
5
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用户加上私钥登录即可。
页: [1]
查看完整版本: 使用Docker快速搭建sftp服务