在EE4服务器上配置SFTP

本文介绍如何在EE4服务器上设置SFTP。 我们将通过在其自己的轻量级容器中运行SFTP守护程序来完成此任务。 我们不会在站点的PHP容器中安装SFTP守护程序,因为不建议每个容器运行多个守护程序进程。

首先,我们需要在服务器上创建一个目录来存储SFTP配置和相关文件数据。

注意:本文假设您已以root用户身份登录

mkdir ~/.sftp-config

现在我们需要创建一个SSH密钥对用于我们的SFTP容器。

ssh-keygen -t ed25519 -f ~/.sftp-config/ssh_host_ed25519_key < /dev/null
ssh-keygen -t rsa -b 4096 -f ~/.sftp-config/ssh_host_rsa_key < /dev/null

现在我们需要在 ~/.sftp-config/users.conf 中创建文件,并为要创建的每个SFTP用户添加用户名和密码。

foo:123:1001
bar:abc:1002:100
baz:xyz:1003:100

该文件的格式为 user:password:uid:gid。 其中UID和GID是计算机上要分配给SFTP用户的用户和组ID 。您可以使用id命令查找特定用户的UID和GID。

id www-data

现在在  ~/.sftp-config/docker-compose.yml 创建一个文件,内容如下:

sftp:
    image: atmoz/sftp
    restart: on-failure
    volumes:
        - /opt/easyengine/sites/example.com/app/htdocs/:/home/<sftp-user>/upload
        - ./ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key
        - ./ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key
        - ./users.conf:/etc/sftp/users.conf:ro
    ports:
        - "2222:22"

You might need to repeat the first line in volumes: for each user defined in user.conf

现在启动容器:

cd ~/.sftp-config/ && docker-compose up -d

更新 users.conf

如果要添加/更新/删除用户,请在 users.conf  文件中进行更改后,运行以下命令以确保更新更新:

cd ~/.sftp-config/ && docker-compose down && docker-compose up -d

使用加密密码

如果查看我们的users.conf文件,则所有密码均未加密。为了提高安全性,您甚至可以使用加密密码。要生成加密的密码,请使用以下命令:

echo -n "your-password" | docker run -i --rm atmoz/makepasswd --crypt-md5 --clearfrom=- | awk '{print $2":e"}'

user.conf中为每个用户使用以上命令。并用加密密码替换明文密码。 现在 user.conf看起来像:

foo:$1$oc7STwA.$CyNcLjDQ0Oh8nLznURifv.:e:1001:100
bar:$1$ezqvUJEE$4c2r1HvoTMJ.Aw2tPp1Nw1:e:1002:100
baz:$1$bcRtbHbO$l0155yF6.lvaJxog3hS9D.:e:1003:100

更新文件后,按照此处所述重新启动SFTP容器。