Fastlane 匹配无法通过 SSH 连接

Fastlane match cannot connect over SSH

现有解决方案

在问我的问题之前,我已经广泛搜索了 SO 和 Github。 None 个现有主题为我们的设置提供了任何可行的解决方案。

配置

我们已经在远程 macOS 机器上配置了 Jenkins + Fastlane。 Fastlane 匹配应该通过 SSH 从专用存储库获取签名凭据(证书 + 配置文件)。

问题

SSH 连接失败(挂起)。詹金斯控制台输出:

INFO [2019-04-09 14:09:29.05]: Cloning remote git repo...
INFO [2019-04-09 14:09:29.05]: If cloning the repo takes too long, you can use the `clone_branch_directly` option in match.
INFO [2019-04-09 14:09:29.05]: [36m$ git clone ssh://git@xxx.xx.x.xxx:xxxx/cert/ios-certificates-profiles.git /var/folders/_redacted_[0m
INFO [2019-04-09 14:09:29.07]: ▸ [35mCloning into '/var/folders/_redacted_'...[0m
INFO [2019-04-09 14:09:29.19]: ▸ [35mThe authenticity of host '[xxx.xx.x.xxx:xxxx]:xxxx ([xxx.xx.x.xxx:xxxx]:xxxx)' can't be established.[0m
INFO [2019-04-09 14:09:29.19]: ▸ [35mRSA key fingerprint is _REDACTED_.

运行 来自同一台机器上终端的 "git clone ssh://git@xxx.xx.x.xxx:xxxx/..." 命令:

Jenkins 仍然挂在 fastlane match 命令上。知道为什么 Jenkins 无法通过 SSH 连接到存储库吗?我错过了什么?

编辑

给match命令加上clone_branch_directly选项没有效果,命令还是挂了

首先尝试在变量 GIT_SSH_COMMAND 设置为“ssh -vvv”的环境中启动 Jenkins 的相同操作:这将在 Git 尝试和克隆时为您提供完整的跟踪使用 SSH URL.

OP mmvie confirms :

Adding verbose logging to SSH revealed Jenkins was ran as sudo.
Running Jenkins not as sudo and pointing to the correct SSH keys resolved the issue.


其他可能性:

fastlane issue 5473 提到 known_hosts 问题,但是如果远程服务器指纹已经添加(假设你的 Jenkins 是 运行 相同的帐户 作为您自己的 shell 会话),然后检查您的私钥是否受密码保护:

FWIW, when I ssh-add -D and then run fastlane certs (which runs match), I get the exact same behavior. It hangs on "Cloning remote git repo..." That's expected behavior. 'ssh-add' fixes things.

fastlane issue 7482中相同:

Figured it out...was on a new box and hadn't added my key to ssh-agent.

ssh-add -K ~/.ssh/id_rsa

其他可能性:fastlane issue 11732

I'm running into this on CircleCi 2.0 as well

Setting this in my environment configuration on Circle 2.0 helps

environment:
  TERM: xterm-256color

因此请检查您的 $TERM 环境变量值。

我在快车道匹配步骤中冻结了 Circle CI 上的任务。原因是我 运行 'checkout' 踩到 linux 并将它扔到 macos vm 上。所以 'checkout' 命令是在 macOS 机器上设置的,ssh 不知道 bitbucket 主机名。

通过向 macos env 作业添加额外的 'checkout' 命令解决了这个问题。这需要一点时间,因为一切都由工作区同步。

我用

解决了类似的问题

ssh-keyscan myserver.com >> ~/.ssh/known_hosts