本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

镜像,旨在提供一种安全的方式建立SSH隧道,无需在镜像中包含密钥或链接到主机。
市面上有数千个autossh Docker容器,为何选择此镜像?我们希望您能发现它更易于使用:体积更小、可定制性更强、支持自动构建、使用简单,并且希望您能从中学***到知识。我们尽可能遵循标准和既定约定,使其更易于理解,并方便您将本项目的代码行复制到其他项目中,以扩展您的知识!
autossh 是一个启动ssh副本并对其进行监控的程序,若ssh进程终止或停止传输流量,autossh会必要时重启它。
在开始之前,我们先定义一些术语:
通常,local 机器与 target 相同,但由于使用Docker,我们需要将local容器与希望autossh连接的target端点分离。通常,autossh就是从local运行的。
一般情况下,target可能位于没有公网IP的家庭局域网段;而remote机器拥有target和source都能访问的地址;source只能访问remote。
target ---> |防火墙| >--- remote ---< |防火墙| <--- source 10.1.1.101 203.0.113.10 192.168.1.101
target(运行autossh)连接到remote服务器并保持隧道活跃,使source可以通过remote代理访问target上的资源。这可视为“远程端口转发”。
您在target(家庭计算机)上运行Docker。(注意:Linux Docker主机自动创建docker0接口,IP为172.17.0.1,以便容器可以路由到主机并访问其他网络。本示例中,启动的容器IP可能为172.17.0.2。)您有一台互联网上的虚拟专用服务器(VPS),可被所有设备访问。此local Docker容器将连接到remote VPS,并将remote的2222端口隧道转发到target的22端口。任何连接到remote 2222端口的请求,实际上都会连接到target的22端口。这称为“反向隧道”。
TARGET_PORT REMOTE_PORT TUNNEL_PORT target <--------------- local ------------> remote <--------------- source 10.1.1.101 172.17.0.2 203.0.113.10 192.168.1.101
LOCAL(172.17.0.2)设备连接到REMOTE(203.0.113.10)的REMOTE_PORT(:22),以在REMOTE(203.0.113.10)上创建TUNNEL_PORT(:***)隧道。
SOURCE(192.168.1.101)连接到REMOTE(203.0.113.10)的TUNNEL_PORT(:***),以访问TARGET(10.1.1.101)的TARGET_PORT(:22)。
默认情况下,SSH服务器应用(如OpenSSH、Dropbear等)仅允许从回环接口(127.0.0.1)连接到转发端口。
这意味着,您必须先通过身份验证连接到remote,并将其用作“跳转点”,然后才能连接到隧道。
在上述示例中,从source,您必须先通过SSH连接到remote(203.0.113.10),然后通过连接127.0.0.1:TUNNEL_PORT访问target(10.1.1.101)。这是一个两步过程。
要将其简化为一步过程(从source通过remote直接连接到target),您必须在remote上进行一些安全更改(不建议)。请参见下文的SSH_BIND_IP部分。
通过将remote的2222端口隧道转发到target的22端口,您可能会将家庭服务器(进而您的家庭网络)暴露在互联网上,这通常被称为“一件坏事(TM)”。请确保适当使用防火墙、fail2ban脚本、非root访问、仅基于密钥的身份验证以及其他必要的安全措施。
首先,您需要在Docker主机上生成SSH密钥。这样可以确保容器的密钥与普通用户密钥分离,以便在需要撤销其中一个时不会影响另一个。
$ ssh-keygen -t rsa -b 4096 -C "autossh" -f autossh_id_rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/jnovack/autossh_id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/jnovack/autossh_id_rsa. Your public key has been saved in /home/jnovack/autossh_id_rsa.pub. The key fingerprint is: 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff autossh The key's randomart image is: +-----[ RSA 4096]-----+ | _.-'''''-._ | | .' _ _ '. | | / (_) (_) \ | | | , , | | | | \`. .`/ | | | \ '.`'""'"`.' / | | '. `'---'` .' | | '-._____.-' | +---------------------+
一个Docker容器怎能没有定制功能?我们提供了大量可设置的环境变量。
所有环境变量均以SSH_为前缀,并非因为必须隧道传输SSH,而是为了便于分组。唯一需要的SSH连接是从LOCAL设备到REMOTE服务器。但是,如果您希望通过证书安全地隧道传输其他协议(如mysql、redis、mongodb),您可能需要考虑我的另一个项目ambassador。
指定remote端点上的用户名。(默认值:root)
指定remote端点的地址(首选IP)。(默认值:localhost)
指定连接到remote端点的SSH端口。(默认值:22)
指定remote端点上作为隧道入口的端口号。(默认值:>32768的随机端口)如果不希望每次重启jnovack/autossh时使用新端口,您可能需要显式设置此值。
此选项会根据SSH_MODE(见下文)反向生效。
指定target的地址(首选IP)。
指定target端点上作为隧道出口或目标服务的端口号。通常是SSH(端口22),但您也可以隧道传输其他服务,如redis(端口6379)、elasticsearch(端口9200)或HTTP(端口80)和HTTPS(端口443)。
如果您希望通过证书安全地隧道传输其他协议(如mysql、redis、mongodb),您可能需要考虑我的另一个项目ambassador。
如果提供了known_hosts文件,但希望不检查主机的IP地址,设置为false。这有助于避免动态IP主机的问题,但会降低对DNS欺骗***的防护。默认启用主机IP检查。
如果希望将密钥存储在Docker Secrets中,可将此设置为/run/secrets/*secret-name*。
如果希望将known_hosts存储在Docker Secrets中,可将此设置为/run/secrets/*secret-name*。
定义隧道的设置方式:
-R:默认,远程转发模式。-L:本地转发模式。您可以定义隧道在remote(SSH_MODE=-R时)或local(SSH_MODE=-L时)上绑定的IP地址。默认仅127.0.0.1。
警告:此过程涉及更改服务器安全设置,会将您的target暴露给其他网络,甚至可能是互联网。不建议在不采取额外预防措施的情况下执行此过程。
除非正确配置remote服务器配置文件中的GatewayPorts变量,否则此选项不会生效。请参阅您的SSH服务器文档以获取正确设置。
您可能希望将此设置为0.0.0.0,以便将SSH_TUNNEL_PORT绑定到LOCAL侧的所有接口。
设置超时时间(秒),如果在此时间内未从服务器收到数据,ssh(1)将通过加密通道发送消息以请求服务器响应。
0:关闭此选项。10:此镜像的默认值。更多详细信息请参见ssh_config(5)。
设置在终止并重新建立连接之前的活动消息阈值。
3:此镜像的默认值。SSH_SERVER_ALIVE_INTERVAL=0时,此变量无效。更多详细信息请参见ssh_config(5)。
autossh(1)ssh_config(5)对于简单使用,挂载是可选的。使用环境变量更为优越,因为它们可以存储在配置文件中,便于传输(和备份!)。
挂载在设置步骤中生成的密钥,或设置SSH_KEY_FILE。
-v /path/to/id_rsa:/id_rsa
如果希望启用StrictHostKeyChecking,挂载known_hosts文件,或设置SSH_KNOWN_HOSTS_FILE。
-v /path/to/known_hosts:/known_hosts
在第一个示例ssh-to-docker-host中,将从Docker容器(名为autossh-ssh-to-docker-host)到运行Docker容器的主机建立隧道。
使用时,通过SSH连接到虚拟互联网地址203.0.113.10:2222,您将被转发到172.17.0.2:22(运行Docker容器的主机)。
在第二个示例ssh-to-lan-endpoint中,将建立到Docker主机私有局域网内主机的隧道。通过SSH连接到虚拟互联网地址203.0.113.10:22222,将通过Docker容器、Docker主机,最终连接到私有局域网中的192.168.123.45:22。
最后,在第三个示例ssh-local-forward-on-1234中,将在容器上创建到198.168.123.45:22的本地转发,映射到端口1234。隧道将通过203.0.113.10:22222创建。
version: '3.7' services: ssh-to-docker-host: image: jnovack/autossh container_name: autossh-ssh-to-docker-host environment: - SSH_REMOTE_USER=sshuser - SSH_REMOTE_HOST=203.0.113.10 - SSH_REMOTE_PORT=2222 - SSH_TARGET_HOST=172.17.0.2 - SSH_TARGET_PORT=22 restart: always volumes: - /etc/autossh/id_rsa:/id_rsa dns: - 8.8.8.8 - 1.1.1.1 ssh-to-lan-endpoint: image: jnovack/autossh container_name: autossh-ssh-to-lan-endpoint environment: - SSH_REMOTE_USER=sshuser - SSH_REMOTE_HOST=203.0.113.10 - SSH_REMOTE_PORT=22222 - SSH_TARGET_HOST=198.168.123.45 - SSH_TARGET_PORT=22 restart: always volumes: - /etc/autossh/id_rsa:/id_rsa dns: - 8.8.8.8 - 4.2.2.4 ssh-local-forward-on-1234: image: jnovack/autossh container_name: autossh-ssh-local-forward environment: - SSH_REMOTE_USER=sshuser - SSH_REMOTE_HOST=203.0.113.10 - SSH_REMOTE_PORT=22222 - SSH_BIND_IP=0.0.0.0 - SSH_TUNNEL_PORT=1234 - SSH_TARGET_HOST=198.168.123.45 - SSH_TARGET_PORT=22 - SSH_MODE=-L restart: always volumes: - /etc/autossh/id_rsa:/id_rsa dns: - 8.8.8.8 - 4.2.2.4
此镜像在Docker Hub上自动构建以下架构版本:
amd64armv6(如Raspberry Pi Zero)armv7(如Raspberry Pi 2至4)arm64v8(如Amazon EC2 A1实例)===SHORT_DESC===
高度可定制的AutoSSH Docker容器
===FULL_DESC===# autossh镜像,旨在提供安全的SSH隧道建立方式,无需在镜像中包含密钥或链接到主机。与其他autossh容器相比,它体积更小、可定制性更强、支持自动构建且易于使用,遵循标准约定以便于理解和知识扩展。
autossh 用于启动SSH进程并对其进行监控,当SSH进程终止或停止传输流量时自动重启。
通常target位于无公网IP的局域网,remote拥有公网IP且可被target和source访问,source通过remote访问target:
target ---> |防火墙| >--- remote ---< |防火墙| <--- source 10.1.1.101 203.0.113.10 192.168.1.101
在家庭计算机(target)上运行Docker,
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429