linuxserver/openssh-serverOpenSSH Server 镜像是一个沙箱环境,允许通过 SSH 访问而无需授予对整个服务器的密钥权限。通常,通过私钥授予 SSH 访问意味着给予服务器的完全访问权限,而此容器创建了一个受限的沙箱环境,用户只能访问映射的文件夹和容器内运行的进程。
该镜像由 LinuxServer.io 团队维护,提供定期更新、安全加固和简化的用户权限管理,适用于需要安全隔离 SSH 访问的场景。
PUBLIC_KEY、PUBLIC_KEY_FILE、PUBLIC_KEY_DIR、PUBLIC_KEY_URL)PASSWORD_ACCESS)SUDO_ACCESS),支持密码或密码less sudoLOG_STDOUT)USER_NAME)该镜像通过 Docker manifest 实现多平台支持,拉取 lscr.io/linuxserver/openssh-server:latest 即可自动获取对应架构的镜像,也可通过标签指定特定架构:
| 架构 | 支持情况 | 标签 |
|---|---|---|
| x86-64 | ✅ | amd64-<version tag> |
| arm64 | ✅ | arm64v8-<version tag> |
PUBLIC_KEY、PUBLIC_KEY_FILE 或 PUBLIC_KEY_DIR 环境变量,指定的公钥将自动添加至 authorized_keys/config/.ssh/authorized_keys 并重启容器authorized_keys 中删除已添加的密钥PUBLIC_KEY_FILE 和 PUBLIC_KEY_DIR 支持 Docker secretsPASSWORD_ACCESS=true 启用密码访问,需同时设置 USER_PASSWORD 或 USER_PASSWORD_FILEbashssh -i /path/to/private/key -p <映射端口> <用户名>@<服务器IP>
SUDO_ACCESS=true 允许 sudo 访问,未设置 USER_PASSWORD 时为密码less sudoUSER_PASSWORD 或 USER_PASSWORD_FILE 用于设置 sudo 密码/etc/motd 自定义登录欢迎信息--hostname 参数设置容器主机名容器提供密钥生成辅助脚本,运行以下命令生成 SSH 公私钥对:
bashdocker run --rm -it --entrypoint /keygen.sh linuxserver/openssh-server
按照提示操作,生成的密钥将显示在控制台输出,需自行保存。
yaml--- services: openssh-server: image: lscr.io/linuxserver/openssh-server:latest container_name: openssh-server hostname: openssh-server # 可选 environment: - PUID=1000 # 用户ID - PGID=1000 # 组ID - TZ=Etc/UTC # 时区 - PUBLIC_KEY=yourpublickey # 可选,公钥内容 - PUBLIC_KEY_FILE=/path/to/file # 可选,公钥文件路径 - PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys # 可选,公钥目录 - PUBLIC_KEY_URL=[***] # 可选,公钥URL - SUDO_ACCESS=false # 可选,是否允许sudo - PASSWORD_ACCESS=false # 可选,是否允许密码访问 - USER_PASSWORD=password # 可选,用户密码 - USER_PASSWORD_FILE=/path/to/file # 可选,密码文件路径 - USER_NAME=linuxserver.io # 可选,用户名(默认:linuxserver.io) - LOG_STDOUT= # 可选,设置为true将日志输出至stdout volumes: - /path/to/openssh-server/config:/config # 配置目录 ports: - 2222:2222 # SSH端口映射 restart: unless-stopped
bashdocker run -d \ --name=openssh-server \ --hostname=openssh-server `# 可选` \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e PUBLIC_KEY=yourpublickey `# 可选` \ -e PUBLIC_KEY_FILE=/path/to/file `# 可选` \ -e PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys `# 可选` \ -e PUBLIC_KEY_URL=[***] `# 可选` \ -e SUDO_ACCESS=false `# 可选` \ -e PASSWORD_ACCESS=false `# 可选` \ -e USER_PASSWORD=password `# 可选` \ -e USER_PASSWORD_FILE=/path/to/file `# 可选` \ -e USER_NAME=linuxserver.io `# 可选` \ -e LOG_STDOUT= `# 可选` \ -p 2222:2222 \ -v /path/to/openssh-server/config:/config \ --restart unless-stopped \ lscr.io/linuxserver/openssh-server:latest
| 参数 | 功能 |
|---|---|
--hostname= | 可选,定义容器主机名 |
-p 2222:2222 | SSH端口映射(主机:容器) |
-e PUID=1000 | 用户ID,用于权限映射 |
-e PGID=1000 | 组ID,用于权限映射 |
-e TZ=Etc/UTC | 时区,参考 时区列表 |
-e PUBLIC_KEY=yourpublickey | 可选,公钥内容,自动添加至authorized_keys |
-e PUBLIC_KEY_FILE=/path/to/file | 可选,公钥文件路径(支持Docker secrets) |
-e PUBLIC_KEY_DIR=/path/to/directory | 可选,公钥目录路径(仅包含公钥文件,支持Docker secrets) |
-e PUBLIC_KEY_URL=[***] | 可选,公钥URL,从URL获取公钥 |
-e SUDO_ACCESS=false | 设置为true允许sudo访问,未设置密码时为密码less sudo |
-e PASSWORD_ACCESS=false | 设置为true允许密码访问,需配合USER_PASSWORD或USER_PASSWORD_FILE |
-e USER_PASSWORD=password | 可选,用户密码(用于sudo或密码访问) |
-e USER_PASSWORD_FILE=/path/to/file | 可选,密码文件路径(覆盖USER_PASSWORD,支持Docker secrets) |
-e USER_NAME=linuxserver.io | 可选,SSH用户名(默认:linuxserver.io) |
-e LOG_STDOUT= | 设置为true将日志输出至stdout而非文件 |
-v /config | 配置目录,包含所有相关配置文件 |
通过 FILE__ 前缀从文件加载环境变量,例如:
bash-e FILE__MYVAR=/run/secrets/mysecretvariable
上述命令将从 /run/secrets/mysecretvariable 文件内容设置 MYVAR 环境变量。
通过 -e UMASK=022 覆盖容器内服务的默认umask设置。Umask通过减法调整权限,而非直接设置权限,详情参考 Umask说明。
使用卷映射时,可通过 PUID 和 PGID 解决权限问题。确保主机卷目录的所有者与容器内的 PUID/PGID 一致。通过以下命令获取当前用户的ID:
bashid your_user
示例输出:
textuid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
:
bashdocker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
注册后,使用 -f Dockerfile.aarch64 指定架构对应的Dockerfile。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务