OpenSSH服务器Docker镜像,提供沙箱环境允许SSH访问而不给予整个服务器的密钥。通过此容器可以创建有限的沙箱环境,用户只能访问映射的文件夹和容器内运行的进程。
!openssh-server
该镜像支持以下架构:
| 架构 | 可用 | 标签 |
|---|---|---|
| x86-64 | ✅ | amd64- |
| arm64 | ✅ | arm64v8- |
| armhf | ❌ |
如果设置了PUBLIC_KEY、PUBLIC_KEY_FILE或PUBLIC_KEY_DIR变量,指定的密钥将自动添加到authorized_keys。如果未设置,可手动将密钥添加到/config/.ssh/authorized_keys并重启容器。从Docker运行环境变量中删除这些变量不会从authorized_keys中删除密钥。PUBLIC_KEY_FILE和PUBLIC_KEY_DIR可与Docker secrets一起使用。
可以通过PASSWORD_ACCESS和USER_PASSWORD变量设置和允许基于密码的访问,但作为组织,我们不鼓励在面向公众的SSH端点使用密码认证。
通过以下命令连接到服务器:ssh -i /path/to/private/key -p PORT USER_NAME@SERVERIP
将SUDO_ACCESS设置为true将允许无密码sudo。USER_PASSWORD和USER_PASSWORD_FILE允许设置可选的sudo密码。
用户只能访问映射的文件夹和容器内运行的进程。添加任何希望用户访问的卷映射。要为用户安装可访问的软件包或服务,请使用LinuxServer容器自定义方法,如这篇博客文章中所述。
示例用例:当服务器管理员希望从远程服务器自动备份到本地服务器,但可能不希望远程服务器的所有其他管理员拥有对本地服务器的完全访问权限。可以设置此容器,挂载用于传入备份的文件夹,并通过上述LinuxServer容器自定义安装rsync,以便进行传入备份,但远程服务器及其管理员的访问将仅限于备份文件夹。
也可以运行此容器的多个副本,映射不同的端口,挂载不同的文件夹,并访问不同的私钥以实现隔离访问。
提示
可以将自己的文本文件卷映射到/etc/motd以覆盖连接时显示的消息。可以选择设置docker参数hostname。
此容器有一个帮助脚本用于生成SSH私钥/公钥。要生成密钥,请运行:
docker run --rm -it --entrypoint /keygen.sh linuxserver/openssh-server
然后按照提示操作。此脚本生成的密钥仅显示在控制台输出中,因此生成后请确保保存到某个位置。
以下是使用docker-compose或docker cli创建容器的方法。
yaml--- version: "2.1" services: openssh-server: image: lscr.io/linuxserver/openssh-server:latest container_name: openssh-server hostname: openssh-server #可选 environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - PUBLIC_KEY=yourpublickey #可选 - PUBLIC_KEY_FILE=/path/to/file #可选 - PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys #可选 - PUBLIC_KEY_URL=https://github.com/username.keys #可选 - SUDO_ACCESS=false #可选 - PASSWORD_ACCESS=false #可选 - USER_PASSWORD=password #可选 - USER_PASSWORD_FILE=/path/to/file #可选 - USER_NAME=linuxserver.io #可选 volumes: - /path/to/appdata/config:/config ports: - 2222:2222 restart: unless-stopped
bashdocker run -d \ --name=openssh-server \ --hostname=openssh-server `#optional` \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e PUBLIC_KEY=yourpublickey `#optional` \ -e PUBLIC_KEY_FILE=/path/to/file `#optional` \ -e PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys `#optional` \ -e PUBLIC_KEY_URL=https://github.com/username.keys `#optional` \ -e SUDO_ACCESS=false `#optional` \ -e PASSWORD_ACCESS=false `#optional` \ -e USER_PASSWORD=password `#optional` \ -e USER_PASSWORD_FILE=/path/to/file `#optional` \ -e USER_NAME=linuxserver.io `#optional` \ -p 2222:2222 \ -v /path/to/appdata/config:/config \ --restart unless-stopped \ lscr.io/linuxserver/openssh-server:latest
容器通过运行时传递的参数进行配置。这些参数用冒号分隔,表示<外部>:<内部>。例如,-p 8080:80会将容器内的端口80暴露出来,可通过主机IP的8080端口访问。
| 参数 | 功能 |
|---|---|
--hostname= | 可选,定义主机名。 |
-p 2222 | SSH端口 |
-e PUID=1000 | 用户ID - 详见下方说明 |
-e PGID=1000 | 组ID - 详见下方说明 |
-e TZ=Etc/UTC | 指定时区,参见列表。 |
-e PUBLIC_KEY=yourpublickey | 可选的SSH公钥,将自动添加到authorized_keys。 |
-e PUBLIC_KEY_FILE=/path/to/file | 可选,指定包含公钥的文件(可与docker secrets一起使用)。 |
-e PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys | 可选,指定包含公钥的目录(可与docker secrets一起使用)。 |
-e PUBLIC_KEY_URL=https://github.com/username.keys | 可选,指定包含公钥的URL。 |
-e SUDO_ACCESS=false | 设置为true允许SSH用户sudo访问。如果未设置USER_PASSWORD,将允许无密码sudo访问。 |
-e PASSWORD_ACCESS=false | 设置为true允许用户/密码SSH访问。需要同时设置USER_PASSWORD或USER_PASSWORD_FILE。 |
-e USER_PASSWORD=password | 可选,为SSH用户设置sudo密码。如果未设置此选项或USER_PASSWORD_FILE但SUDO_ACCESS设置为true,用户将拥有无密码sudo访问权限。 |
-e USER_PASSWORD_FILE=/path/to/file | 可选,指定包含密码的文件。此设置优先于USER_PASSWORD选项(可与docker secrets一起使用)。 |
-e USER_NAME=linuxserver.io | 可选,指定用户名(默认:linuxserver.io) |
-v /config | 包含所有相关配置文件。 |
可以通过使用特殊的前缀FILE__从文件设置任何环境变量。
例如:
bash-e FILE__MYVAR=/run/secrets/mysecretvariable
将根据/run/secrets/mysecretvariable文件的内容设置环境变量MYVAR。
对于我们所有的镜像,您可以使用可选的-e UMASK=022设置覆盖容器内启动的服务的默认umask设置。请记住,umask不是chmod,它根据其值减去权限而不是添加。在请求支持之前,请先阅读相关内容。
使用卷(-v标志)时,主机操作系统和容器之间可能会出现权限问题,我们通过允许您指定用户PUID和组PGID来避免此问题。
确保主机上的任何卷目录都由您指定的相同用户拥有,任何权限问题都会像魔术一样消失。
在这个例子中PUID=1000和PGID=1000,要找到您的ID,请使用id your_user:
bashid your_user
示例输出:
textuid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
容器运行时的Shell访问:
bashdocker exec -it openssh-server /bin/bash
实时监控容器日志:
bashdocker logs -f openssh-server
容器版本号:
bashdocker inspect -f '{{ index .Config.Labels "build_version" }}' openssh-server
镜像版本号:
bashdocker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openssh-server:latest
我们的大多数镜像是静态的、版本化的,需要更新镜像并重新创建容器才能更新内部的应用程序。除了一些例外,我们不建议或支持在容器内更新应用程序。
以下是更新容器的说明:
更新镜像:
所有镜像:
bashdocker-compose pull
单个镜像:
bashdocker-compose pull openssh-server
更新容器:
所有容器:
bashdocker-compose up -d
单个容器:
bashdocker-compose up -d openssh-server
您还可以删除旧的悬空镜像:
bashdocker image prune
更新镜像:
bashdocker pull lscr.io/linuxserver/openssh-server:latest
停止运行中的容器:
bashdocker stop openssh-server
删除容器:
bashdocker rm openssh-server
使用上述相同的docker run参数重新创建新容器(如果正确映射到主机文件夹,您的/config文件夹和设置将被保留)
您还可以删除旧的悬空镜像:
bashdocker image prune
如果您想对这些镜像进行本地修改以用于开发目的或只是为了自定义逻辑:
bashgit clone https://github.com/linuxserver/docker-openssh-server.git cd docker-openssh-server docker build \ --no-cache \ --pull \ -t lscr.io/linuxserver/openssh-server:latest .
可以使用multiarch/qemu-user-static在x86_64硬件上构建ARM变体:
bashdocker run --rm --privileged multiarch/qemu-user-static:register --reset
注册后,您可以使用-f Dockerfile.aarch64定义要使用的dockerfile。
以下是 lsiodev/openssh-server 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务