如何在Azure管道中使用SSH任务解决这个奇怪的错误

如何在Azure管道中使用SSH任务解决这个奇怪的错误,ssh,azure-devops,Ssh,Azure Devops,我试图在Azure devops中使用SSH部署任务,但我很难让它正常工作 步骤: 我生成了一个ssh密钥 密钥将添加到服务器 (可选)本地测试密钥(工作) 在Azure Devops中创建了服务连接(密码字段中包含私钥数据和密码) 允许正确的管道服务连接安全性 将添加到发布管道中 添加了一个内联脚本 连接成功 它似乎已连接,但不执行命令。我已经检查了服务器上的/var/log/auth.log文件,它确实显示了成功的连接。远程服务器上的身份验证日志确实显示了来自devops的成功身份验证,连接

我试图在Azure devops中使用SSH部署任务,但我很难让它正常工作

步骤:
  • 我生成了一个ssh密钥
  • 密钥将添加到服务器
  • (可选)本地测试密钥(工作)
  • 在Azure Devops中创建了服务连接(密码字段中包含私钥数据和密码)
  • 允许正确的管道服务连接安全性
  • 将添加到发布管道中
  • 添加了一个内联脚本
  • 连接成功 它似乎已连接,但不执行命令。我已经检查了服务器上的
    /var/log/auth.log
    文件,它确实显示了成功的连接。远程服务器上的身份验证日志确实显示了来自devops的成功身份验证,连接持续时间正好为超时设置的值

    顺序错误,日志显示命令,然后连接 在日志中,它显示了我的第二个命令(
    docker compose pull
    )和第三个命令(
    docker compose up-d
    ),但没有显示第一个命令。命令显示在尝试连接线路之前。第一个命令根本不显示

    是我犯了错还是他们有别的事

    下面是任务的日志记录

    2020-02-12T15:05:23.7258315Z ##[section]Starting: Run SSH
    2020-02-12T15:05:23.8777631Z ==============================================================================
    2020-02-12T15:05:23.8778469Z Task         : SSH
    2020-02-12T15:05:23.8778560Z Description  : Run shell commands or a script on a remote machine using SSH
    2020-02-12T15:05:23.8778657Z Version      : 0.151.1
    2020-02-12T15:05:23.8778735Z Author       : Microsoft Corporation
    2020-02-12T15:05:23.8778839Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/ssh
    2020-02-12T15:05:23.8778953Z ==============================================================================
    2020-02-12T15:05:24.5860676Z docker-compose pull
    2020-02-12T15:05:24.5860824Z docker-compose up -d
    2020-02-12T15:05:24.5861194Z Trying to establish an SSH connection to ***@my-server.domain.com:22
    2020-02-12T15:05:25.4787782Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4789160Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4791265Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4791477Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792286Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792439Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792552Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792648Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792757Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792851Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4792960Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.4793055Z (node:4364) Warning: Use Cipheriv for counter mode of aes-256-ctr
    2020-02-12T15:05:25.7447781Z Successfully connected.
    2020-02-12T15:05:25.7564295Z ##[error]Unhandled: Cannot parse privateKey: Unsupported key format
    2020-02-12T15:09:23.7874932Z ##[error]The task has timed out.
    2020-02-12T15:09:23.7877908Z ##[section]Finishing: Run SSH
    
    任务YAML 我试过Windows和Ubuntu托管的代理

    显示相同错误的无关问题:
    • 与节点有关的问题
    同样的问题,还有解释


    任务库似乎调用了错误的节点函数,在19年3月“解决”了。

    我知道您的第7步说您添加了一个内联脚本,但是您是否使用了runshell命令选项而不是
    内联
    脚本选项?你描述中的一种预感,关于操作顺序不正确

    注意:每个命令在单独的进程中运行。如果要运行一系列相互依赖的命令(例如,在执行命令之前更改当前文件夹),请改用内联脚本选项


    使用私有代理怎么样?试着运行一个简单的命令,比如
    ipconfig
    ,然后检查结果

    此外,根据错误消息
    Unhandled:Cannot parse privateKey:Unsupported key format
    ,这似乎是privateKey格式问题

    因此,请尝试使用ssh keygen实用程序将现有密钥转换为旧的PEM格式,然后重试以检查是否有效


    ssh-keygen-p-m PEM-f~/.ssh/id\u rsa

    这可能就是问题所在,所以我只是仔细检查了一下,并将任务的yaml添加到了原始问题中。@Stephan根据您的编辑,您使用的是内联脚本选项,这样应该很好。基于此问题,如果您关闭新服务连接预览功能并尝试重新生成服务连接,该怎么办?您的建议无效。结果是一样的。它已连接到服务器,但在命令已存在于日志中之后才连接。因此,我认为这可能是任务中的一个bug。正如原始问题中所述,它确实成功连接,但它没有在服务器上执行命令。我已经尝试将命令更改为echo,但也没有成功。另一种键格式会导致相同的错误,并且在出现无法连接的错误之前在日志中列出了命令。因此
    对aes-256-ctr的计数器模式使用Cipheriv
    十次,然后是我的第二个和第三个命令,然后连接。。。。。
    - task: SSH@0
      displayName: 'Run remote docker-compose commands'
      inputs:
        sshEndpoint: 'Endpoint name redacted'
        runOptions: inline
        inline: |
         cd ~/correct-folder/
         docker-compose pull
         docker-compose up -d
      timeoutInMinutes: 4