
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Dockerfile链接centos-7 https://github.com/jdeathe/centos-ssh/blob/centos-7/Dockerfilecentos-6 https://github.com/jdeathe/centos-ssh/blob/centos-6/Dockerfile镜像构建中包含http://fedoraproject.org/wiki/EPEL%E3%80%81IUS%E5%92%8CSCL%E4%BB%93%E5%BA%93%E3%80%82%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%E5%8C%85%E5%8C%85%E6%8B%AChttps://github.com/rvoicilas/inotify-tools/wiki%E3%80%81OpenSSH%E5%AE%89%E5%85%A8%E5%A4%96%E5%A3%B3%E3%80%81Sudo%E3%80%81http://www.vim.org/%E3%80%81python-setuptools%E3%80%81http://supervisord.org/%E5%92%8Chttps://github.com/coderanger/supervisor-stdout%E3%80%82
当基于此镜像运行Docker容器时,http://supervisord.org/%E7%94%A8%E4%BA%8E%E5%90%AF%E5%8A%A8%60sshd%60%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E3%80%82
SSH访问通过公钥认证实现,默认需要http://www.vagrantup.com/%E7%9A%84https://github.com/mitchellh/vagrant/blob/master/keys/vagrant%E3%80%82
访问运行中容器的终端无需依赖SSH。最简单的方法是使用docker exec命令运行bash(或sh):
$ docker exec -it {{容器名称或ID}} bash
若无法使用docker exec,推荐使用命令密钥和nsenter命令。详见https://github.com/jdeathe/centos-ssh/blob/centos-7/docs/command-keys.md%E4%B8%AD%E7%9A%84%E8%AE%BE%E7%BD%AE%E8%AF%B4%E6%98%8E%E3%80%82
生产环境中,建议选择示例中所示的特定发布标签。
从镜像jdeathe/centos-ssh运行名为ssh.1的SSH容器,映射到Docker主机的2020端口。
$ docker run -d \ --name ssh.1 \ -p 2020:22 \ jdeathe/centos-ssh:2.6.1
查看日志获取sudo所需密码:
$ docker logs ssh.1
私钥设置
下载https://github.com/mitchellh/vagrant/blob/master/keys/vagrant%EF%BC%9A
$ curl -LSs \ https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant \ > id_rsa_insecure
为私钥设置严格权限:
$ chmod 600 id_rsa_insecure
连接
使用ssh命令行客户端和https://github.com/mitchellh/vagrant/blob/master/keys/vagrant%E8%BF%9E%E6%8E%A5%EF%BC%9A
$ ssh -p 2020 -i id_rsa_insecure \ app-admin@{{docker主机IP}}
从镜像jdeathe/centos-ssh运行名为sftp.1的SFTP容器,映射到Docker主机的2021端口。
$ docker run -d \ --name sftp.1 \ -p 2021:22 \ -e SSH_USER_FORCE_SFTP=true \ jdeathe/centos-ssh:2.6.1
连接
使用sftp命令行客户端和https://github.com/mitchellh/vagrant/blob/master/keys/vagrant%E8%BF%9E%E6%8E%A5%EF%BC%9A
$ sftp \ -o Port=2021 \ -o StrictHostKeyChecking=no \ -i id_rsa_insecure \ app-admin@{{docker主机IP}}
可使用标准Docker命令运行基于此镜像的容器,也可参考https://github.com/jdeathe/centos-ssh/blob/centos-7/docker-compose.yml%E7%A4%BA%E4%BE%8B%E3%80%82
生产环境中,建议选择示例中所示的特定发布标签。
使用scmi
对于高级用例,镜像内置安装程序(服务容器管理接口)https://github.com/jdeathe/centos-ssh/blob/centos-7/docs/scmi.md%E3%80%82
使用make
若已检出https://github.com/jdeathe/centos-ssh%E4%B8%94%E5%AE%89%E8%A3%85%E4%BA%86%60make%60%EF%BC%8CMakefile%E6%8F%90%E4%BE%9B%E6%9E%84%E5%BB%BA%E3%80%81%E5%AE%89%E8%A3%85%E3%80%81%E5%90%AF%E5%8A%A8%E3%80%81%E5%81%9C%E6%AD%A2%E7%AD%89%E7%9B%AE%E6%A0%87%EF%BC%8C%E8%BF%90%E8%A1%8C%60make help`查看说明。
使用环境变量
以下示例通过SSH_USER环境变量将默认SSH用户名“app-admin”(及对应主目录路径)覆盖为“centos”和“/home/centos”:
$ docker stop ssh.1 && \ docker rm ssh.1; \ docker run -d \ --name ssh.1 \ -p :22 \ --env "SSH_USER=centos" \ docker.xuanyuan.run/jdeathe/centos-ssh:2.6.1
要查看SSH_USER用户的sudo密码,可通过以下命令检查容器日志:
$ docker logs ssh.1
首次运行时,日志输出会显示SSH_USER指定用户的自动生成密码,示例日志片段:
2019-06-20 00:10:35,306 WARN No file matches via include "/etc/supervisord.d/*.ini" ... ================================================================================ SSH Details -------------------------------------------------------------------------------- ... password : uIEqLkiacCvxaN45 ... user : app-admin -------------------------------------------------------------------------------- 0.516901 ...
环境变量
运行时定义了多个环境变量,允许操作员自定义容器行为:
ENABLE_SSHD_BOOTSTRAP & ENABLE_SSHD_WRAPPER
可能需要阻止sshd-bootstrap脚本和/或sshd守护进程启动。例如,当以此Dockerfile为基础构建其他镜像时,可将ENABLE_SSHD_BOOTSTRAP和ENABLE_SSHD_WRAPPER设为false以减少最终容器中的运行进程数:
... --env "ENABLE_SSHD_BOOTSTRAP=false" \ --env "ENABLE_SSHD_WRAPPER=false" \ ...
ENABLE_SUPERVISOR_STDOUT
镜像已安装supervisor_stdout,可使supervisord控制的进程同时输出到日志文件和stdout。建议仅输出到stdout以最小化运行进程数。将ENABLE_SUPERVISOR_STDOUT设为“false”可阻止supervisor_stdout启动;若镜像日志输出需此功能,应设为“true”。
SSH_AUTHORIZED_KEYS
默认添加的SSH用户公钥不安全(便于使用已知私钥访问)。通过SSH_AUTHORIZED_KEYS可替换为其他公钥(或多个)。添加多个密钥时,建议对值进行base64编码,或结合绑定挂载文件、Docker Swarm配置等使用容器文件路径:
... --env "SSH_AUTHORIZED_KEYS= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqmLedI2mEJimvIm1OzT1EYJCMwegL/jfsXARLnYkZvJlEHFYDmRgS+YQ+MA9PKHyriCPmVNs/6yVc2lopwPWioXt0+ulH/H43PgB6/4fkP0duauHsRtpp7z7dhqgZOXqdLUn/Ybp0rz0+yKUOBb9ggjE5n7hYyDGtZR9Y11pJ4TuRHmL6wv5mnj9WRzkUlJNYkr6X5b6yAxtQmX+2f33u2qGdAwADddE/uZ4vKnC0jFsv5FdvnwRf2diF/9AagDb7xhZ9U3hPOyLj31H/OUce4xBpGXRfkUYkeW8Qx+zEbEBVlGxDroIMZmHJIknBDAzVfft+lsg1Z06NCYOJ+hSew== another public key " \ ...
注意:Mac OSX上的
base64命令默认不换行编码文件,Linux上需使用-w选项防止80字符换行,如base64 -w 0 -i {{密钥路径}}。
... --env "SSH_AUTHORIZED_KEYS=$( cat ${HOME}/.ssh/id_rsa.pub ${HOME}/.ssh/another_id_rsa.pub | base64 -i - )" \ ...
使用容器文件路径时,authorized_keys将从该路径读取:
... --env "SSH_AUTHORIZED_KEYS=/var/run/config/authorized_keys" ...
SSH_CHROOT_DIRECTORY
仅当SSH_USER_FORCE_SFTP设为true时适用。使用SFTP时,用户将被限制在ChrootDirectory中。值可包含占位符%h(替换为SSH_USER_HOME)和%u(替换为SSH_USER)。默认%h在多数情况下适用,但用户主目录内需有可写子目录。若未挂载卷到SSH用户主目录路径,会自动创建_data目录。如需用户可写主目录,可使用/chroot/%u等替代值,默认用户主目录路径将变为/chroot/app-admin/home/app-admin:
... --env "SSH_CHROOT_DIRECTORY=%h" \ ...
SSH_INHERIT_ENVIRONMENT
默认重置SSH用户环境,Docker环境变量不可用。设置SSH_INHERIT_ENVIRONMENT=true可将Docker环境变量传递给SSH用户环境(部分值如SSH_USER_PASSWORD、HOME、HOSTNAME、PATH、TERM等会被移除以避免问题):
... --env "SSH_INHERIT_ENVIRONMENT=true" \ ...
SSH_PASSWORD_AUTHENTICATION
默认禁用SSH密码认证,仅允许公钥/私钥认证(推荐配置)。若客户端无法使用密钥认证,可设SSH_PASSWORD_AUTHENTICATION=true启用密码认证:
... --env "SSH_PASSWORD_AUTHENTICATION=true" \ ...
SSH_SUDO
首次运行时,SSH用户默认sudo规则为ALL=(ALL) ALL(需密码)。可通过SSH_SUDO限制命令或允许无密码sudo:
... --env "SSH_SUDO=ALL=(ALL) NOPASSWD:ALL" \ ...
SSH_USER
首次运行时默认创建用户“app-admin”,可通过SSH_USER指定其他用户名:
... --env "SSH_USER=centos" \ ...
SSH_USER_FORCE_SFTP
设SSH_USER_FORCE_SFTP=true可强制使用internal-sftp命令,阻止shell访问、移除sudo权限并限制用户到SSH_CHROOT_DIRECTORY。结合--volumes-from其他运行中容器,可允许访问应用数据卷(如设SSH_USER_HOME=/var/www/允许访问Apache容器数据卷):
... --env "SSH_USER_FORCE_SFTP=false" \ ...
SSH_USER_HOME
首次运行时默认主目录为/home/%u(%u替换为SSH_USER值),可通过SSH_USER_HOME指定其他路径:
... --env "SSH_USER_HOME=/home/centos" \ ...
SSH_USER_PASSWORD
首次运行时自动生成用户密码,可通过SSH_USER_PASSWORD指定特定密码。设为空字符串将自动生成密码(若SSH_SUDO未设为无密码所有命令,密码会显示在日志中):
... --env "SSH_USER_PASSWORD=Passw0rd!" \ ...
设为有效容器文件路径时,将从文件读取值(结合Docker Swarm secrets等编排功能可安全设置):
... --env "SSH_USER_PASSWORD=/var/run/secrets/ssh_user_password" \ ...
SSH_USER_PASSWORD_HASHED
设SSH_USER_PASSWORD_HASHED=true时,SSH_USER_PASSWORD值将被视为crypt SHA-512加盐密码哈希:
... --env "SSH_USER_PASSWORD_HASHED=true" \ --env 'SSH_USER_PASSWORD=$6$pepper$g5/OhofGtHVo3wqRgVHFQrJDyK0mV9bDpF5HP964wuIkQ7MXuYq1KRTmShaUmTQW3ZRsjw2MjC1LNPh5HMcrY0' ...
生成crypt SHA-512密码哈希
生成密码Passw0rd!的哈希字符串:
$ docker run --rm jdeathe/centos-ssh \ env PASSWORD=Passw0rd! \ python -c "import crypt,os; print crypt.crypt(os.environ.get('PASSWORD'))"
SSH_USER_PRIVATE_KEY
为SSH_USER设置RSA私钥,建议结合编排系统的密钥功能(如Docker Swarm secrets)使用容器文件路径,或绑定挂载文件、base64编码值(无换行):
注意:
SSH_USER_FORCE_SFTP=true(SFTP模式)时此设置无效。
设为有效容器文件路径时,从文件读取值:
... --env "SSH_USER_PRIVATE_KEY=/var/run/secrets/ssh_user_private_key" ...
注意:Mac OSX上的
base64命令默认不换行编码文件,Linux上需使用-w选项防止80字符换行,如base64 -w 0 -i {{密钥路径}}。
... --env "SSH_USER_PRIVATE_KEY=$( base64 -i ${HOME}/.ssh/id_rsa )" \ ...
SSH_USER_SHELL
首次运行时默认shell为“//bash”,可通过SSH_USER_SHELL指定其他shell(如“/s/nologin”阻止登录):
... --env "SSH_USER_SHELL=/bin/sh" \ ...
SSH_USER_ID
通过SSH_USER_ID设置SSH_USER的UID:GID,非系统用户建议值≥500(默认500:500),2-499范围可能与系统账户冲突,适用于SFTP容器挂载现有容器数据卷时:
... --env "SSH_USER_ID=1000:1000" \ ...
SYSTEM_TIMEZONE
设置基于区域的系统时区:
... --env "SYSTEM_TIMEZONE=Europe/London" \ ...
禁用密码认证(默认)
注意:以下文档描述使用已知私钥连接的过程(默认不安全)。在本地测试环境外运行容器时,建议创建并使用替代的私钥/公钥对。
在主目录创建SSH所需权限的.ssh目录:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务