如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
这是一个易于使用的SFTP(SSH文件传输协议)服务器Docker镜像,基于atmoz/sftp分叉而来,内置OpenSSH和Fail2ban,用于增强对暴力***的防护能力。
适用于需要安全文件传输服务的场景,如个人文件存储、小型团队文件共享、服务器间文件传输等,尤其适合对安全性有较高要求的环境。
bashdocker run \ -v /host/config/path:/config \ -p 22:22 -d docker.xuanyuan.run/markusmcnugen/sftp \ user:pass:::upload
用户"user"使用密码"pass"可通过SFTP登录,并将文件上传到名为"upload"的文件夹。无需挂载目录或自定义UID/GID。之后可检查文件并使用--volumes-from将其挂载到其他位置。
卷
| 卷 | 是否必需 | 功能 | 示例 |
|---|---|---|---|
config | 是 | SSH和Fail2ban配置文件 | /your/config/path/:/config |
路径/文件
SSH
| 路径 | 是否必需 | 功能 |
|---|---|---|
/config/sshd/keys | 是* | SSH主机密钥目录 |
/config/sshd/sshd_config | 是* | SSH服务器配置文件 |
/config/sshd/users.conf | 是 | SSH用户配置文件 |
/config/userkeys | 否 | SSH用户密钥目录 |
Fail2Ban
| 路径 | 是否必需 | 功能 |
|---|---|---|
/config/fail2ban | 是 | Fail2ban配置和日志目录 |
/config/fail2ban/fail2ban.conf | 否* | Fail2Ban配置文件 |
/config/fail2ban/jail.conf | 否* | Fail2Ban规则配置文件 |
/config/fail2ban/fail2ban.sqlite3 | 否* | 自动生成的Fail2Ban SQLite数据库,用于重启间的持久化封禁 |
*这些文件在容器启动时如不存在会自动创建
端口
OpenSSH服务器默认运行在22端口,可将容器的22端口映射到主机的任意端口。
| 端口 | 协议 | 是否必需 | 功能 | 示例 |
|---|---|---|---|---|
22 | TCP | 是 | SSH端口 | 2222:22 |
共享计算机目录
将主机路径挂载到用户主目录中的文件夹。示例将主机上传目录挂载到用户主目录下的upload目录。也可参考下方"从其他位置绑定挂载目录"示例,了解如何映射到不同目录并使用脚本在用户主目录内挂载目录。
bashdocker run \ -v /host/config/path:/config \ -v /host/upload:/home/user/upload \ -p 22:22 -d docker.xuanyuan.run/markusmcnugen/sftp \ user:pass:1001
添加SSH用户
在/config/sshd/users.conf中添加用户,格式如下:
user:pass:UID:GID
示例:
user:pass:1001:100 user2:abc:1002:100 user3:xyz:1003:100
注意:如果未为用户提供密码,他们只能使用SSH密钥登录
加密密码
在密码后添加:e标记为加密密码。如果在终端中使用,需用单引号包裹。
foo:$1$0G2g0GSt$ewU0t6GXG15.0hWoOX8X9.:e:1001
提示:可使用https://hub.docker.com/r/atmoz/makepasswd/生成加密密码:
echo -n "your-password" | docker run -i --rm atmoz/makepasswd --crypt-md5 --clearfrom=-
使用SSH密钥登录
在/config/userkeys目录中放置以用户名命名并带有.pub扩展名的公钥。这些密钥会在容器启动时复制到用户的.ssh/authorized_keys中。
示例:
user.pub
提供自定义SSH主机密钥(推荐)
容器首次运行时会在/config/sshd/keys中生成新的SSH主机密钥。可将自己的sshd密钥放在此文件夹,容器运行时会复制到/etc/ssh/。
提示:可使用以下命令生成密钥:
bashssh-keygen -t ed25519 -f ssh_host_ed25519_key < /dev/null ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null
执行自定义脚本或应用
将程序放在/config/sshd/scripts中,容器启动时会自动运行。
从其他位置绑定挂载目录
如果使用--volumes-from或希望在用户主目录中提供自定义目录,可在/config/sshd/scripts/中添加绑定挂载脚本。
bash#!/bin/bash # 文件挂载为:/config/sshd/scripts/bindmount.sh # 示例(请根据需要修改) function bindmount() { if [ -d "$1" ]; then mkdir -p "$2" fi mount --bind $3 "$1" "$2" } # 注意权限,可能需要修复: # chown -R :users /data/common bindmount /data/admin-tools /home/admin/tools bindmount /data/common /home/dave/common bindmount /data/common /home/peter/common bindmount /data/docs /home/peter/docs --read-only
注意:使用
mount需要容器启用CAP_SYS_ADMINcapability。https://github.com/atmoz/sftp/issues/60#issuecomment-332909232。
注意:镜像上次构建时间可能会影响OpenSSH版本的可用性。由于这是与https://hub.docker.com/r/phusion/baseimage/关联的自动构建,构建频率取决于其推送更新的频率(不受本项目控制)。当然,您可以克隆此仓库并手动运行自己的构建以提高可预测性。
要构建此容器,请克隆仓库并进入目录。
构建:
bash$ cd /repo/location/sftp $ docker build -t sftp .
运行:
bash$ docker run \ -v /host/config/path:/config \ -p 22:22 -d markusmcnugen/sftp \ user:pass:::upload
这将启动一个如"从Docker仓库运行容器"部分所述的容器。
使用Docker Compose:
yamlsftp: image: markusmcnugen/sftp volumes: - /host/upload:/home/user/upload ports: - "22:22" command: user:pass:::upload
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 markusmcnugen/sftp 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: