首页 > 解决方案 > ssh 到 jenkins Pipeline 中第 2 阶段的第 1 阶段中使用 terraform 模块创建的新 Azure VM

问题描述

我正在为我们的 CD 自动化程序开发 jenkins 管道。我们需要使用 Jenkins Pipeline 中的 terraform(在第 1 阶段创建)创建 Azure VM(Linux),然后从(第 2 阶段)连接到它并执行一些命令。

我已经创建了一个具有所需配置的 Terraform 模块,以及 jenkins ssh 密钥,该密钥将在创建过程中复制到新 VM。还从状态文件中提取新 VM 的 IP,然后复制到 txt 文件,使用 txt 文件作为参考,在第 2 阶段传递 IP。除 SSH 连接外,一切都按预期工作。

下面是我的设置

下面是我的 Jenkins 流水线脚本

      stage('Create VM') {
        steps {
        sh '''
            #!/bin/bash
            cd ${WORKSPACE}/Terraform/terraform-azure-linux-vm/terraform-azure-network_interface/
            pwd
            terraform init
            terraform plan
            ls
            terraform apply --auto-approve
            cd ${WORKSPACE}/Terraform/terraform-azure-linux-vm/terraform-azure-linux
            terraform init
            terraform plan
            ls
            terraform apply --auto-approve
            cat terraform.tfstate | grep "private_ip_address" | awk -F' ' '{print $2}' | awk 'NR==1{print $1}'| tr -d ',"' > ${WORKSPACE}/Ansible-roles/linux_inventory.txt
                '''
       }
  }

   stage('ssh connection') {
        steps {
            script{
                
        env.data = readFile(file: 'Ansible-roles/linux_inventory.txt')
                  
       sh '''
        ssh -tt jenkins@${data} -o StrictHostKeyChecking=no << EOF
        sudo -i
        echo "Connected"
        exit
        exit
        EOF'''
            }
        }

`

当我第一次从 jenkins vm 手动连接到新 VM 时,它会提示输入密码,而从第二次开始 ssh 连接无密码。但我需要第一次从管道连接。

以下是我第一次尝试 SSH 时的错误

警告:远程主机标识已更改!

可能有人在做一些讨厌的事情!有人现在可能正在窃听您(中间​​人攻击)!请联系您的系统管理员。在 /var/lib/jenkins/.ssh/known_hosts 添加正确的主机密钥以消除此消息。/var/lib/jenkins/.ssh/known_hosts:12 中的违规 ECDSA 密钥删除: ssh-keygen -f "/var/lib/jenkins/.ssh/known_hosts" -R "*******" 密码身份验证被禁用以避免中间人攻击。键盘交互

标签: azurejenkinssshjenkins-pipeline

解决方案


推荐阅读