Azure DevOps CD 管道上的 SSH 超时错误

SSH timeout error on Azure DevOps CD pipeline

我在尝试部署到 AWS 上托管的 VM 实例时遇到超时错误。手动我可以使用

登录
ssh -i myKeyFile.pem myuser@IP

访问远程机器后,我可以执行一些 docker 命令,一切正常。但是现在我需要在 CD 管道上实现自动化,这是我收到以下错误的地方:

2020-06-02T21:37:12.6877276Z Trying to establish an SSH connection to ***@IP:port
2020-06-02T21:38:52.4629461Z ##[error]Failed to connect to remote machine. Verify the SSH service connection details. Error: Error: Timed out while waiting for handshake.
2020-06-02T21:38:52.4685976Z ##[section]Finishing: Run shell commands on remote machine

我建立 SSH 连接的步骤是:

  1. 我在 Azure DevOps 的项目设置上创建了一个 SSH 服务连接
  2. 我创建了 CD 管道
  3. 我使用以下参数添加了一个 SSH 任务

当我手动触发它以测试它是否工作时,发布开始工作正常,但在 1:43 分钟后或多或少是我收到错误的时间:

然后,当我查看日志时,它是我在开头粘贴的相​​同错误:

[error]Failed to connect to remote machine. Verify the SSH service connection details. Error: Error: Timed out while waiting for handshake

我已将握手超时设置从默认值 (20000) 增加到 90000,但没有成功。

有人遇到过这个问题吗?

似乎 Azure DevOps 的默认代理池存在持续错误。很多人都报告过这个问题,Azure DevOps 团队在写这个 post 的时候正在处理它(我找不到 post 那里有所有细节。我稍后会添加这个上)。

解决方法是

  1. 创建自托管代理。
  2. 创建后,您需要使用新的自托管代理重新创建 CD 管道。
  3. 其余的 SSH 任务配置取决于您的需要。但是如果你想测试 SSH 连接是否有效,只需打印一些东西:

echo '我已连接'

  1. 在此之后,您的 CD 管道应该可以正常工作。

有关如何创建 Self-Hosted Agent on Windows 的更多详细信息。还有 Linux 和 Mac 的链接。

我在 Azure 中的 VM 中遇到了类似的问题。事实证明,我已将安全组设置为仅允许从我的本地网络和 Azure Dev-Ops 代理显然 运行 在 Microsoft 网络中使用 SSH,并且来自不同的 IP 地址范围。解决方案是对所有源 IP 地址开放 SSH。您可以获得代理使用的 IP 地址范围列表 Dev-Ops,但它们似乎每周都在变化,这不是很有帮助。

https://docs.microsoft.com/en-us/azure/devops/organizations/security/allow-list-ip-url?view=azure-devops#microsoft-hosted-agents