2025年12月

GitLab SSH 连接故障排查复盘

本次 GitLab SSH 连接故障表现为:ssh -T git@<server> 返回 Permission denied (publickey)。我们对整个 SSH 认证链条进行了全方位排查,最终在操作系统底层锁定了问题。以下是排查链路。

第一步:确认客户端和密钥同步(排除应用层问题)

首先,我们排除了最常见的密钥不匹配和配置未生效的问题。

  1. 对比密钥指纹

我们需要确认本地私钥与 GitLab 界面上记录的公钥是否一致。

  • 执行命令(本地):
    ssh-keygen -l -f ~/.ssh/id_ed25519_github_work.pub
  • 结果确认:
    输出的 SHA256 指纹与 GitLab 网页界面上显示的内容完全一致。
  1. 检查服务器端密钥同步

确认 GitLab 是否已将公钥写入服务器的 SSH 授权文件。

  • 执行命令(服务器):
    sudo cat /var/opt/gitlab/.ssh/authorized_keys | grep "您的密钥特征码"
  • 结果确认:
    文件中存在对应的公钥记录(例如 key-23),说明 GitLab 的同步机制正常。
  1. 检查 GitLab 服务状态

排除服务宕机导致连接被拒的可能性。

  • 执行命令(服务器):
    sudo gitlab-ctl status
  • 结果确认:
    核心服务如 gitlab-workhorsepuma 均显示状态为 run,服务运行正常。

第二步:追踪 GitLab Shell 启动失败(定位执行环境问题)

既然密钥已同步且服务正常,但连接仍被拒绝,问题必然发生在 OpenSSH 服务器尝试启动 GitLab Shell 程序的瞬间。

检查 GitLab Shell 日志

  • 执行命令(服务器):
    sudo tail -n 50 /var/log/gitlab/gitlab-shell/gitlab-shell.log
  • 结果确认:
    无任何输出。这说明 GitLab Shell 程序根本没有机会启动,或者在写入日志前就被系统终止了。故障点位于比 GitLab 应用更底层的环境。

第三步:深入 SSHD 日志(锁定操作系统底层故障)

当应用层日志无效时,必须查看 OpenSSH 服务器自身的系统日志,寻找拒绝会话的真实原因。

检查系统认证日志

  • 执行命令(服务器):
    sudo tail -n 50 /var/log/auth.log
  • 发现致命日志:
    Dec 2 16:36:06 ... sshd[3305327]: User git not allowed because account is locked

最终确诊:
权限被拒与 GitLab 密钥毫无关系,而是因为 OpenSSH 服务器发现操作系统的 git 专用账户处于锁定状态。sshd 在进行公钥认证流程之前,就直接根据操作系统账户状态拒绝了连接。


解决方案

故障原因:
操作系统 git 账户被锁定 (account is locked)。

修复步骤:
使用 usermod 命令解锁 git 账户。为了安全起见(防止无密码账户被系统拦截),我们设置一个无法用于登录的锁定哈希。

  • 执行命令(服务器):
    sudo usermod -p '*LOCKED*' git

验证:
再次执行 ssh -T git@<server>,成功看到 Welcome to GitLab 提示。

针对公司产品中“新建项目”功能使用高德Web autoComplete SDK所面临的商业授权费用问题,我们可以考虑一些替代方案。首先,我们可以探索其他地图服务提供商,如百度地图和腾讯地图,它们同样提供地址自动完成功能,但可能需要企业认证和购买商业授权。其次,可以考虑使用开源地图数据和服务,例如OpenStreetMap,结合开源JavaScript库如Leaflet或OpenLayers来实现地址搜索和地图展示功能。此外,也可以考虑使用谷歌地图API,尽管它同样需要支付费用,但可能提供更灵活的定价选项。最后,如果预算有限,可以考虑与一些初创地图服务公司合作,它们可能提供更具成本效益的解决方案。在选择合适的方案时,需要综合考虑成本、功能需求、技术支持和数据更新频率等因素。

在处理Page和Worker共同部署的Bitwarden兼容服务时,您遇到了一个关于域名优选的问题。您尝试了双域名SaaS优选,但遇到了522错误。随后,您尝试通过NS接入支持DNS分流的提供商,将海外CNAME指向Page域名,国内CNAME指向优选域名,但发现Page可以正常优选,而Worker路由失效。当您在Page中删除自定义域后,Worker路由又重新生效。针对这个问题,您可以考虑以下几点来优化处理:

  1. 检查DNS设置:确保DNS设置正确无误,特别是NS记录和CNAME记录的配置。有时候DNS缓存问题也会导致类似的情况。
  2. 验证Worker配置:检查Worker的路由配置是否正确,确保所有的API和身份路由都设置正确。有时候路由规则可能需要更精确的配置。
  3. 使用Cloudflare的DNS和路由功能:考虑使用Cloudflare提供的DNS和路由功能,如Page规则和Worker路由,来更精细地控制流量。
  4. 测试不同的优选策略:尝试不同的优选策略,比如先优选Page,再根据请求类型或地理位置优选Worker。
  5. 查看Cloudflare文档和社区支持:查阅Cloudflare的官方文档,了解最新的优选策略和配置方法。同时,参考社区中的其他案例和解决方案,可能会找到针对您问题的具体建议。
  6. 监控和调试:使用Cloudflare的控制面板和监控工具,检查请求的流向和处理过程,找出可能的问题点。有时候通过日志和监控可以更直观地发现问题所在。

通过以上步骤,您应该能够更好地理解和解决Page和Worker共同部署时的优选问题。如果问题仍然存在,考虑联系Cloudflare的客服支持,获取更专业的帮助。

关于您的甲骨文云账户被扣款120美元的问题,这可能是由于服务器配置错误或违规使用服务导致的。通常,云服务提供商会有详细的账单和费用说明,您应该首先检查账单明细,查看扣款的具体原因。此外,您还可以查看甲骨文云的官方文档或联系他们的客服支持,以获取更具体的指导和建议。确保您的服务器配置符合甲骨文云的使用条款,避免因配置错误或违规操作而导致的额外费用。同时,定期检查和优化服务器配置,可以帮助您避免未来可能出现的类似问题。

在人工智能领域,构建一个用于训练YOLO(You Only Look Once)模型的自训练平台是一个复杂但非常有价值的项目。YOLO是一种流行的实时目标检测算法,适用于多种应用场景。以下是一些开源平台和资源,可以帮助您开始构建这样一个平台:

  1. TensorFlow Object Detection API:TensorFlow提供了强大的目标检测API,支持YOLO等多种算法。它允许您训练自定义模型,并提供了丰富的文档和教程。
  2. Darknet:Darknet是一个开源的深度学习框架,由Justin Johnson开发,专门用于实现YOLO算法。它速度快,非常适合实时目标检测。
  3. OpenCV:OpenCV是一个开源的计算机视觉库,提供了大量的图像处理和计算机视觉功能。您可以使用它来处理视频流,抽帧,并进行图像标注。
  4. LabelImg:LabelImg是一个图形界面工具,用于为YOLO等目标检测算法创建标注数据。它可以帮助您手动标注图像,为模型训练准备数据。
  5. LabelImg:LabelImg是一个图形界面工具,用于为YOLO等目标检测算法创建标注数据。它可以帮助您手动标注图像,为模型训练准备数据。
  6. Keras-YOLO:Keras-YOLO是一个基于Keras的YOLO实现,它允许您使用Keras的易用性来训练YOLO模型。
  7. PyTorch YOLO:PyTorch YOLO是一个基于PyTorch的YOLO实现,它提供了灵活的框架来训练和部署YOLO模型。

构建一个自训练平台涉及多个步骤,包括数据收集、数据标注、模型训练和模型部署。上述工具和资源可以帮助您在各个阶段进行有效的工作。希望这些信息对您有所帮助,祝您项目顺利!