
stoffel2107/sftpdebian, latest (Dockerfile) !Docker Image Size (debian)alpine (Dockerfile) !Docker Image Size (alpine)基于OpenSSH的SFTP(SSH文件传输协议)服务器镜像,旨在提供安全、易用的文件共享服务。支持通过多种方式定义用户,灵活挂载卷,适用于需要安全文件传输的场景,如开发环境文件交换、多用户隔离存储等。
SFTP_USERS环境变量或挂载配置文件(/etc/sftp/users.conf)定义用户/etc/sftp.d/目录下的自定义脚本用户可通过以下三种方式定义,语法统一为:user:pass[:e][:uid[:gid[:dir1[,dir2]...]]],各部分说明:
user:用户名(必填)pass:密码(若使用SSH密钥登录可留空,格式为user::uid...):e:可选,标记密码为加密格式uid:可选,用户UID(建议手动设置以匹配主机文件权限)gid:可选,用户GIDdir1[,dir2]...:可选,在用户主目录下创建的子目录(自动赋予写权限)/home/user/upload)或直接挂载/home目录SFTP_USERS:用于定义用户,格式同用户定义语法,多个用户用空格分隔bashdocker run -p 22:22 -d atmoz/sftp foo:pass:::upload
创建用户“foo”,密码“pass”,可登录SFTP并上传文件到“upload”目录。无挂载目录或自定义UID/GID。
挂载主机目录并设置UID:
bashdocker run \ -v <主机目录>/upload:/home/foo/upload \ -p 2222:22 -d atmoz/sftp \ foo:pass:1001
使用Docker Compose:
yamlsftp: image: atmoz/sftp volumes: - <主机目录>/upload:/home/foo/upload ports: - "2222:22" command: foo:pass:1001
登录方法
OpenSSH服务器默认运行在22端口,示例中容器22端口映射到主机2222端口。使用OpenSSH客户端登录:sftp -P 2222 foo@<主机IP>
bashdocker run \ -v <主机目录>/users.conf:/etc/sftp/users.conf:ro \ -v mySftpVolume:/home \ -p 2222:22 -d atmoz/sftp
<主机目录>/users.conf内容示例:
foo:123:1001:100 bar:abc:1002:100 baz:xyz:1003:100
在密码后添加:e标记为加密密码(终端中使用需加单引号):
bashdocker run \ -v <主机目录>/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ 'foo:$1$0G2g0GSt$ewU0t6GXG15.0hWoOX8X9.:e:1001'
生成加密密码的Python命令:
docker run --rm python:alpine python -c "import crypt; print(crypt.crypt('你的密码'))"
将公钥挂载到用户的.ssh/keys/目录,所有密钥会自动添加到.ssh/authorized_keys:
bashdocker run \ -v <主机目录>/id_rsa.pub:/home/foo/.ssh/keys/id_rsa.pub:ro \ -v <主机目录>/id_other.pub:/home/foo/.ssh/keys/id_other.pub:ro \ -v <主机目录>/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ foo::1001
为避免容器重建时主机密钥变化导致MITM警告,可挂载自定义主机密钥:
bashdocker run \ -v <主机目录>/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key \ -v <主机目录>/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key \ -v <主机目录>/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ foo::1001
生成主机密钥的命令:
bashssh-keygen -t ed25519 -f ssh_host_ed25519_key < /dev/null ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null
将程序放入/etc/sftp.d/目录,容器启动时会自动运行。示例:绑定挂载其他位置的目录
bash#!/bin/bash # 挂载为: /etc/sftp.d/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_ADMIN capability,详情参见相关说明。
主要区别在于大小和OpenSSH版本:
OpenSSH版本取决于所选的Linux发行版及版本,可通过以下链接查询:
镜像每日自动构建,以获取包管理器提供的最新OpenSSH版本。




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务