Docker Desktop 3.3.0+ 破坏了端口 443 上的 SSH:如何修复?
Docker Desktop 3.3.0+ breaks SSH on port 443: how to fix?
我正在为 Mac 使用 Docker 桌面。
自版本 3.3.0 和 3.3.1 以来,我无法再连接到端口 443 上的 altssh.gitlab.com,而 3.2.2 和更早版本可以。
因此,这些命令都适用于 3.2.2(我已降级并验证):
$ ssh git@gitlab.com
$ ssh -p 443 git@altssh.gitlab.com
两者都产生这样的输出:
PTY allocation request failed on channel 0
Welcome to GitLab, @user!
Connection to altssh.gitlab.com closed.
然而,对于 3.3.0 和 3.3.1,只有 ssh git@gitlab.com
在工作,而端口 443 似乎被 Docker 代理或拦截,导致:
kex_exchange_identification: Connection closed by remote host
我用 nc gitlab.com 22
(netcat) 验证了端口 22 的 gitlab.com 回复:
SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2
nc altssh.gitlab.com 443
也在 3.2.2 中打印该文本,但在 3.3.0+ 中什么也不显示,只是挂起。
我在这里查看了 3.3.0 的发行说明:
https://docs.docker.com/docker-for-mac/release-notes/
尝试在 ~/.docker/config.json
中设置 noProxy
,因为它与 HTTPS 一起被提及并重新启动 Docker 桌面,但它没有任何改变:
{
"proxies": {
"default": {
"noProxy": "altssh.gitlab.com,075e5c94415c4071840fa96497443943.pacloudflare.com,172.65.251.182,2606:4700:90:0:f0ff:e6a3:2ac:f7ef"
}
}
}
有没有办法在端口 443 / altssh.gitlab.com 上通过 SSH 使用 Docker 3.3.0+?
从 Docker 3.3.2 及更新版本开始,错误已得到修复。
• Disable the HTTP and HTTPS transparent proxies when there is no upstream proxy set. Fixes docker/for-mac#5572.
• Revert to the HTTP and HTTPS proxy implementation used in 3.2.2.
之前...
看起来这个错误是已知的,虽然在这个上下文中并不完全是。
原因是假设的“HTTPS”/TLS 连接在不使用 SNI(服务器名称指示)时会被丢弃,而 SSH 作为 non-SSL/TLS 协议可能不会这样做。
已经有一个打开的 Docker 桌面用于 Mac 问题:
https://github.com/docker/for-mac/issues/5568
以及链接的 Whosebug 问题:
Cannot reach SSL IP when in docker container over bridge. Getting SSL_ERROR_SYSCALL
我正在为 Mac 使用 Docker 桌面。
自版本 3.3.0 和 3.3.1 以来,我无法再连接到端口 443 上的 altssh.gitlab.com,而 3.2.2 和更早版本可以。
因此,这些命令都适用于 3.2.2(我已降级并验证):
$ ssh git@gitlab.com
$ ssh -p 443 git@altssh.gitlab.com
两者都产生这样的输出:
PTY allocation request failed on channel 0
Welcome to GitLab, @user!
Connection to altssh.gitlab.com closed.
然而,对于 3.3.0 和 3.3.1,只有 ssh git@gitlab.com
在工作,而端口 443 似乎被 Docker 代理或拦截,导致:
kex_exchange_identification: Connection closed by remote host
我用 nc gitlab.com 22
(netcat) 验证了端口 22 的 gitlab.com 回复:
SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2
nc altssh.gitlab.com 443
也在 3.2.2 中打印该文本,但在 3.3.0+ 中什么也不显示,只是挂起。
我在这里查看了 3.3.0 的发行说明: https://docs.docker.com/docker-for-mac/release-notes/
尝试在 ~/.docker/config.json
中设置 noProxy
,因为它与 HTTPS 一起被提及并重新启动 Docker 桌面,但它没有任何改变:
{
"proxies": {
"default": {
"noProxy": "altssh.gitlab.com,075e5c94415c4071840fa96497443943.pacloudflare.com,172.65.251.182,2606:4700:90:0:f0ff:e6a3:2ac:f7ef"
}
}
}
有没有办法在端口 443 / altssh.gitlab.com 上通过 SSH 使用 Docker 3.3.0+?
从 Docker 3.3.2 及更新版本开始,错误已得到修复。
• Disable the HTTP and HTTPS transparent proxies when there is no upstream proxy set. Fixes docker/for-mac#5572.• Revert to the HTTP and HTTPS proxy implementation used in 3.2.2.
之前...
看起来这个错误是已知的,虽然在这个上下文中并不完全是。
原因是假设的“HTTPS”/TLS 连接在不使用 SNI(服务器名称指示)时会被丢弃,而 SSH 作为 non-SSL/TLS 协议可能不会这样做。
已经有一个打开的 Docker 桌面用于 Mac 问题:
https://github.com/docker/for-mac/issues/5568
以及链接的 Whosebug 问题:
Cannot reach SSL IP when in docker container over bridge. Getting SSL_ERROR_SYSCALL