无法ssh到通过terraform创建的ibmcloud实例

无法ssh到通过terraform创建的ibmcloud实例,cloud,terraform,ibm-cloud,terraform-provider-ibm,Cloud,Terraform,Ibm Cloud,Terraform Provider Ibm,我可以通过Terraform在IBMCloud中成功创建一个实例。问题是,成功部署后,我无法使用ssh将其部署到实例中 地形提供商ibm的版本是:1.11.2 地形本身的版本是:v0.12.20 我使用的地形代码如下所示: provider "ibm" { ibmcloud_api_key = "" region="eu-gb" generation = 2 } variable "ssh_public_ke

我可以通过Terraform在IBMCloud中成功创建一个实例。问题是,成功部署后,我无法使用ssh将其部署到实例中

地形提供商ibm的版本是:1.11.2

地形本身的版本是:v0.12.20

我使用的地形代码如下所示:

provider "ibm" {
  ibmcloud_api_key   = ""
  region="eu-gb"
  generation = 2
}

variable "ssh_public_key" {
  default = "~/.ssh/id_rsa.pub"
}

resource "ibm_is_vpc" "testacc_vpc" {
  name = "testvpc"
}

resource "ibm_is_subnet" "testacc_subnet" {
  name            = "testsubnet"
  vpc             = ibm_is_vpc.testacc_vpc.id
  zone            = "eu-gb-1"
  ipv4_cidr_block = "10.242.0.0/24"
}

resource "ibm_is_ssh_key" "testacc_sshkey" {
  name       = "testssh"
  public_key = "file(var.ssh_public_key)"
}


resource "ibm_is_security_group" "testacc_security_group" {
    name = "test"
    vpc = ibm_is_vpc.testacc_vpc.id
}

resource "ibm_is_security_group_rule" "testacc_security_group_rule_all" {
    group = ibm_is_security_group.testacc_security_group.id
    direction = "inbound"
    remote = "127.0.0.1"
    depends_on = [ibm_is_security_group.testacc_security_group]
}

resource "ibm_is_security_group_rule" "testacc_security_group_rule_ssh" {
    group = ibm_is_security_group.testacc_security_group.id
    direction = "inbound"
    remote = "127.0.0.1"
    icmp {
        code = 22
        type = 22
    }
    depends_on = [ibm_is_security_group_rule.testacc_security_group_rule_all]
}
resource "ibm_is_instance" "testacc_instance" {
  name    = "testinstance"
  image   = "99edcc54-c513-4d46-9f5b-36243a1e50e2"
  profile = "cx2-2x4"

  primary_network_interface {
    subnet = ibm_is_subnet.testacc_subnet.id
  }

  network_interfaces {
    name   = "eth1"
    subnet = ibm_is_subnet.testacc_subnet.id
  }

  vpc  = ibm_is_vpc.testacc_vpc.id
  zone = "eu-gb-1"
  keys = [ibm_is_ssh_key.testacc_sshkey.id]
  depends_on = [ibm_is_security_group_rule.testacc_security_group_rule_ssh]

  //User can configure timeouts
  timeouts {
    create = "90m"
    delete = "30m"
  }
}

resource "ibm_is_floating_ip" "fip1" {
  name   = "fip1"
  target = ibm_is_instance.testacc_instance.primary_network_interface[0].id
}

output "sshcommand" {
  value = "ssh root@${ibm_is_floating_ip.fip1.address}"
}

有人认为安全规则有问题吗?我是否缺少一些额外的配置


提前谢谢大家

在terraform文件中需要做一些更改

  • 您需要将实例(vsi)附加到安全组
  • 如果要定义主网络接口,则不需要
    网络接口。如果需要,请记住使用
    security\u groups
  • 遥控器应为
    0.0.0/0
    ,而不是
    127.0.0.1
  • 传递SSH-pub-key值
    cat~/.SSH/id\u rsa.pub
    ,或者从UI创建SSH-key,然后传递密钥名
  • 这是更新后的Terraform文件,包含所有上述更改。有关文档,请参阅


    哇,它确实起作用了!感谢您提供的所有见解!
    data "ibm_is_ssh_key" "ds_key" {
        name = "test"
    }
    
    provider "ibm" {
      ibmcloud_api_key   = ""
      region="eu-gb"
      generation = 2
    }
    
    
    resource "ibm_is_vpc" "testacc_vpc" {
      name = "testvpc"
    }
    
    resource "ibm_is_subnet" "testacc_subnet" {
      name            = "testsubnet"
      vpc             = ibm_is_vpc.testacc_vpc.id
      zone            = "eu-gb-1"
      ipv4_cidr_block = "10.242.0.0/24"
    }
    
    resource "ibm_is_ssh_key" "testacc_sshkey" {
      name       = "testssh"
      public_key = "ssh-rsa xxxxxxx"
    }
    
    
    resource "ibm_is_security_group" "testacc_security_group" {
        name = "test"
        vpc = ibm_is_vpc.testacc_vpc.id
    }
    
    resource "ibm_is_security_group_rule" "testacc_security_group_rule_all" {
        group = ibm_is_security_group.testacc_security_group.id
        direction = "inbound"
        remote = "0.0.0.0/0"
        depends_on = [ibm_is_security_group.testacc_security_group]
    }
    
    resource "ibm_is_security_group_rule" "testacc_security_group_rule_ssh" {
        group = ibm_is_security_group.testacc_security_group.id
        direction = "inbound"
        remote = "0.0.0.0/0"
        icmp {
            code = 22
            type = 22
        }
        depends_on = [ibm_is_security_group_rule.testacc_security_group_rule_all]
    }
    resource "ibm_is_instance" "testacc_instance" {
      name    = "testinstance"
      image   = "99edcc54-c513-4d46-9f5b-36243a1e50e2"
      profile = "cx2-2x4"
    
      primary_network_interface {
        subnet = ibm_is_subnet.testacc_subnet.id
        security_groups = [ibm_is_security_group.testacc_security_group.id]
      }
    
      vpc  = ibm_is_vpc.testacc_vpc.id
      zone = "eu-gb-1"
      keys = [ibm_is_ssh_key.testacc_sshkey.id]
      depends_on = [ibm_is_security_group_rule.testacc_security_group_rule_ssh]
    
      //User can configure timeouts
      timeouts {
        create = "90m"
        delete = "30m"
      }
    }
    
    resource "ibm_is_floating_ip" "fip1" {
      name   = "fip1"
      target = ibm_is_instance.testacc_instance.primary_network_interface[0].id
    }
    
    output "sshcommand" {
      value = "ssh root@${ibm_is_floating_ip.fip1.address}"
    }