首页 > 解决方案 > 从 docker 容器内尝试登录失败后 Git 存储库无法访问

问题描述

好的,所以。我正在尝试为我们在工作中经常使用的应用程序构建一个 docker 容器,作为构建过程的一部分,docker 需要克隆我们公司拥有的某些私有 git 存储库的内容。

现在,在开始 docker 构建过程(使用 docker-compose ... )之前,我曾经可以完全访问这些存储库,这些存储库是通过一对公共/私有 SSH 密钥设置的。例如,执行类似的命令

ssh -Tvvv git@gitlab.main-company-repo.com

生成(除其他外)输出消息,如“身份验证成功(公钥)”,我可以在本地存储库中使用所有常用的 git 命令(拉取、推送......)而没有问题。

在我为我们的专有应用程序启动 docker 构建过程后,这种情况发生了变化。构建本身不成功,给出错误消息,例如(出于隐私目的而更改的确切消息):

 Failed to execute git clone --no-checkout 'ssh://git@gitlab.main-company-repo.com:7000/zs-payments.git' 
'/srv/www/zs/payment' && cd '/srv/www/zs/payments' && git remote add composer 
'git@gitlab.main-company-repo.com:7000/zs-payments.git' && git fetch composer

 Cloning into '/srv/www/zs/payments'...
 ssh: connect to host git@gitlab.main-company-repo.com:7000: Connection refused
 fatal: Could not read from remote repository.

 Please make sure you have the correct access rights
 and the repository exists.

我认为问题的“连接被拒绝”部分来自我没有从 Docker 容器内正确设置 SSH 密钥身份验证的事实。这是一个已经在 StackOverflow 上讨论过的话题,参见例如

在 docker 容器中使用 SSH 密钥

但是,目前我对这个特定问题不感兴趣!我真正的问题是,在不成功的 docker 构建过程(以及相关的“连接被拒绝”问题)之后,我根本无法访问我公司的 git 存储库!例如,执行上面给出的 ssh 测试命令 (ssh -Tvvv ...) 现在会导致错误消息,例如(再次,出于隐私目的而更改的确切消息)

OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug1: Reading configuration data C:\\Users\\user_name/.ssh/config
debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2
debug2: resolving "gitlab.main-company-repo.de" port 7000
debug2: ssh_connect_direct
debug1: Connecting to gitlab.main-company-repo.de [85.xxx.xx.11] port 7000.
debug3: finish_connect - ERROR: async io completed with error: 10060, io:000001EDA40D7590
debug1: connect to address 85.xxx.xx.11 port 7000: Connection timed out
ssh: connect to host gitlab.main-company-repo.de: Connection timed out

同样,像 pull 和 push 这样的 git 命令在 docker 构建过程之前曾经在我的本地存储库中工作得非常好,现在给出了相同的“连接超时”错误。

重新启动计算机并不能解决问题,即在重新启动后,我也无法使用存储库。DID 帮助的一件事(有一段时间)是切换到另一个网络。从我最初使用的 WLAN 网络从我的移动服务提供商(通过 USB-Tethering)切换到 Internet 后,问题暂时消失了,我可以再次访问存储库。但是在再次进行 docker build 之后(以相同的错误消息结束),“手机互联网”会发生相同的“连接超时”事情,并且两个网络上的存储库都对我不可用。

有谁知道这里可能发生什么?换句话说,如何从 Docker 容器中尝试不成功的 git 登录尝试(使用 SSH 密钥)导致我被“锁定”在所有(以前可用的)存储库中,并且重新启动机器无济于事(但切换到另一个网络呢)?这可能是某种防火墙问题,我的 git 登录尝试已被标记为潜在威胁?

任何关于这里可能发生的事情的提示和/或建议都将非常受欢迎!如果它可能很重要,这一切都发生在 Windows 10 机器上。

另外(我只记得这一点),在有问题的存储库上运行 ping 命令,即

ping 85.xxx.xx.11 7000

给出错误信息

ping: sendmsg: Network is unreachable

ping 命令是在 Windows 中基于 WSL 的 Ubuntu 上运行的。再次,在这方面的任何帮助将不胜感激!

标签: gitdockerssh

解决方案


问题最终以一种有点出乎意料的方式解决了。在我发布这个问题后不久,公司的其他人开始遇到类似的问题,他们的 git 命令以相同的“连接超时”错误消息结尾。这似乎只影响具有静态 IP 地址的用户,也发生在那些没有使用任何类型的 docker 容器构建。

事实证明(或者至少我被告知)git firewall 将我们的 IP 地址列入黑名单,将我们的访问尝试指定为潜在威胁。公司负责这些事情的人已经设法将我们的IP从黑名单中删除,此后一切顺利。我们仍然不知道为什么会发生这种情况,以及 git 在将我们的活动指定为“不需要的”时使用了什么样的标准。如果将来有更多关于此的信息,我会在这里发布,以便其他人可以避免类似情况。


推荐阅读