Terraformを使用したAzure VMへのSSH接続

靴:

Terraformを使用して、Azureのリソースグループの一部としてVMを正常に作成しました。次のステップは、新しいマシンでsshを実行し、いくつかのコマンドを実行することです。そのために、VMリソースの一部としてプロビジョナーを作成し、SSH接続をセットアップしました。

resource "azurerm_virtual_machine" "helloterraformvm" {
    name = "terraformvm"
    location = "West US"
    resource_group_name = "${azurerm_resource_group.helloterraform.name}"
    network_interface_ids = ["${azurerm_network_interface.helloterraformnic.id}"]
    vm_size = "Standard_A0"

    storage_image_reference {
        publisher = "Canonical"
        offer = "UbuntuServer"
        sku = "14.04.2-LTS"
        version = "latest"
    }


    os_profile {
        computer_name = "hostname"
        user     = "some_user"
        password = "some_password"
    }

    os_profile_linux_config {
        disable_password_authentication = false
    }

    provisioner "remote-exec" {
        inline = [
          "sudo apt-get install docker.io -y"
        ]
        connection {
          type     = "ssh"
          user     = "some_user"
          password = "some_password"
        }
    }

}

「terraform apply」を実行すると、sshが失敗して無限ループに陥り、このログを何度も繰り返しているようです。

azurerm_virtual_machine.helloterraformvm (remote-exec): Connecting to remote host via SSH...
azurerm_virtual_machine.helloterraformvm (remote-exec):   Host:
azurerm_virtual_machine.helloterraformvm (remote-exec):   User: testadmin
azurerm_virtual_machine.helloterraformvm (remote-exec):   Password: true
azurerm_virtual_machine.helloterraformvm (remote-exec):   Private key: false
azurerm_virtual_machine.helloterraformvm (remote-exec):   SSH Agent: true

私は何か間違ったことをしていると確信していますが、それが何であるかわかりません:(

編集:

私はプロビジョナーなしでこのマシンをセットアップしようとしましたが、与えられたユーザー名/パスワードで問題なくSSHでマシンにセットアップできます。ただし、Terraformからホスト名を取得する方法がわからないため、Azureポータルでホスト名を検索する必要があります。ログの "Host:"行が空であるのは疑わしいので、何か関係があるのでしょうか。

更新:

との接続でホスト名を示すようなさまざまなことを試しました

host = "${azurerm_public_ip.helloterraformip.id}" 

そして

host = "${azurerm_public_ip.helloterraformips.ip_address}"

ドキュメントに示されているように、成功しませんでした。

また、パスワードの代わりにssh-keysを使用してみましたが、同じ結果-接続試行の無限ループ、接続していない理由に関する明確なエラーメッセージはありません。

靴:

私はなんとかこの仕事をすることができました。いくつか変更しました:

  • ホストの名前をに与えましたconnection
  • SSHキーが適切に構成されている-それらは暗号化されていない必要があります。
  • トックconnectionのうちの要素をprovisioner要素。

SSH鍵などのデータを置き換える、完全に機能するTerraformファイルは次のとおりです。

# Configure Azure provider
provider "azurerm" {
  subscription_id = "${var.azure_subscription_id}"
  client_id       = "${var.azure_client_id}"
  client_secret   = "${var.azure_client_secret}"
  tenant_id       = "${var.azure_tenant_id}"
}

# create a resource group if it doesn't exist
resource "azurerm_resource_group" "rg" {
    name = "sometestrg"
    location = "ukwest"
}

# create virtual network
resource "azurerm_virtual_network" "vnet" {
    name = "tfvnet"
    address_space = ["10.0.0.0/16"]
    location = "ukwest"
    resource_group_name = "${azurerm_resource_group.rg.name}"
}

# create subnet
resource "azurerm_subnet" "subnet" {
    name = "tfsub"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    virtual_network_name = "${azurerm_virtual_network.vnet.name}"
    address_prefix = "10.0.2.0/24"
    #network_security_group_id = "${azurerm_network_security_group.nsg.id}"
}

# create public IPs
resource "azurerm_public_ip" "ip" {
    name = "tfip"
    location = "ukwest"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    public_ip_address_allocation = "dynamic"
    domain_name_label = "sometestdn"

    tags {
        environment = "staging"
    }
}

# create network interface
resource "azurerm_network_interface" "ni" {
    name = "tfni"
    location = "ukwest"
    resource_group_name = "${azurerm_resource_group.rg.name}"

    ip_configuration {
        name = "ipconfiguration"
        subnet_id = "${azurerm_subnet.subnet.id}"
        private_ip_address_allocation = "static"
        private_ip_address = "10.0.2.5"
        public_ip_address_id = "${azurerm_public_ip.ip.id}"
    }
}

# create storage account
resource "azurerm_storage_account" "storage" {
    name = "someteststorage"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    location = "ukwest"
    account_type = "Standard_LRS"

    tags {
        environment = "staging"
    }
}

# create storage container
resource "azurerm_storage_container" "storagecont" {
    name = "vhd"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    storage_account_name = "${azurerm_storage_account.storage.name}"
    container_access_type = "private"
    depends_on = ["azurerm_storage_account.storage"]
}



# create virtual machine
resource "azurerm_virtual_machine" "vm" {
    name = "sometestvm"
    location = "ukwest"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    network_interface_ids = ["${azurerm_network_interface.ni.id}"]
    vm_size = "Standard_A0"

    storage_image_reference {
        publisher = "Canonical"
        offer = "UbuntuServer"
        sku = "16.04-LTS"
        version = "latest"
    }

    storage_os_disk {
        name = "myosdisk"
        vhd_uri = "${azurerm_storage_account.storage.primary_blob_endpoint}${azurerm_storage_container.storagecont.name}/myosdisk.vhd"
        caching = "ReadWrite"
        create_option = "FromImage"
    }

    os_profile {
        computer_name = "testhost"
        admin_username = "testuser"
        admin_password = "Password123"
    }

    os_profile_linux_config {
      disable_password_authentication = false
      ssh_keys = [{
        path     = "/home/testuser/.ssh/authorized_keys"
        key_data = "ssh-rsa xxx [email protected]"
      }]
    }

    connection {
        host = "sometestdn.ukwest.cloudapp.azure.com"
        user = "testuser"
        type = "ssh"
        private_key = "${file("~/.ssh/id_rsa_unencrypted")}"
        timeout = "1m"
        agent = true
    }

    provisioner "remote-exec" {
        inline = [
          "sudo apt-get update",
          "sudo apt-get install docker.io -y",
          "git clone https://github.com/somepublicrepo.git",
          "cd Docker-sample",
          "sudo docker build -t mywebapp .",
          "sudo docker run -d -p 5000:5000 mywebapp"
        ]
    }

    tags {
        environment = "staging"
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

gcloud-sdkを使用してVMへのSSH接続を維持できません

分類Dev

crypto / sshを使用したCiscoスイッチへの接続

分類Dev

SSHを使用したgithub.comへのTortiouseSVN接続

分類Dev

SSH接続を使用したU-Bootへのアクセス

分類Dev

GCPでは、VMへのSSH接続とCloud Shellの使用の違いは何ですか?

分類Dev

SSH golangを介したmongoDBへの接続

分類Dev

SSHと秘密鍵を介したMySQLへの接続

分類Dev

Raspberry PiへのSSH接続:接続が拒否されました

分類Dev

GORMを使用したSQLServerへの接続

分類Dev

GORMを使用したSQLServerへの接続

分類Dev

CMISを使用したAlfrescoへの接続

分類Dev

Pythonを使用したAzureSQLへの接続

分類Dev

MySQLWorkbenchを使用したVagrantBoxへの接続

分類Dev

MSIを使用したAzureVaultへの接続

分類Dev

MySQLWorkbenchを使用したDockerMySQLへの接続

分類Dev

HeidiSQLを使用したSQLServerへの接続

分類Dev

Pythonを使用したOracleDBへの接続

分類Dev

Expressを使用したAmazonRDSへの接続

分類Dev

WindowsとパテからGoogleCloud VMへのSSHトンネル:ネットワークエラー:接続がタイムアウトしました

分類Dev

Eclipse:リモートVMへの接続に失敗しました。接続拒否。

分類Dev

Eclipseエラー:「リモートVMへの接続に失敗しました」

分類Dev

VPNに接続すると、vmwareプレーヤーVMへの接続が失われました

分類Dev

sshトンネルを介したデータベースへの接続

分類Dev

UbuntuでPythonを使用してSSHへの接続を自動化する方法は?

分類Dev

サーバーへのSSH接続とGitHubへのアクセスのためのssh-keygenを理解する

分類Dev

MinikubeのVMにSSHで接続する方法を教えてください。

分類Dev

ssh:ホストへの接続接続がタイムアウトしました

分類Dev

マネージドIDを使用したAzure SQLへのEF Core接続

分類Dev

SSHを使用してVM(GCE)に接続できません

Related 関連記事

  1. 1

    gcloud-sdkを使用してVMへのSSH接続を維持できません

  2. 2

    crypto / sshを使用したCiscoスイッチへの接続

  3. 3

    SSHを使用したgithub.comへのTortiouseSVN接続

  4. 4

    SSH接続を使用したU-Bootへのアクセス

  5. 5

    GCPでは、VMへのSSH接続とCloud Shellの使用の違いは何ですか?

  6. 6

    SSH golangを介したmongoDBへの接続

  7. 7

    SSHと秘密鍵を介したMySQLへの接続

  8. 8

    Raspberry PiへのSSH接続:接続が拒否されました

  9. 9

    GORMを使用したSQLServerへの接続

  10. 10

    GORMを使用したSQLServerへの接続

  11. 11

    CMISを使用したAlfrescoへの接続

  12. 12

    Pythonを使用したAzureSQLへの接続

  13. 13

    MySQLWorkbenchを使用したVagrantBoxへの接続

  14. 14

    MSIを使用したAzureVaultへの接続

  15. 15

    MySQLWorkbenchを使用したDockerMySQLへの接続

  16. 16

    HeidiSQLを使用したSQLServerへの接続

  17. 17

    Pythonを使用したOracleDBへの接続

  18. 18

    Expressを使用したAmazonRDSへの接続

  19. 19

    WindowsとパテからGoogleCloud VMへのSSHトンネル:ネットワークエラー:接続がタイムアウトしました

  20. 20

    Eclipse:リモートVMへの接続に失敗しました。接続拒否。

  21. 21

    Eclipseエラー:「リモートVMへの接続に失敗しました」

  22. 22

    VPNに接続すると、vmwareプレーヤーVMへの接続が失われました

  23. 23

    sshトンネルを介したデータベースへの接続

  24. 24

    UbuntuでPythonを使用してSSHへの接続を自動化する方法は?

  25. 25

    サーバーへのSSH接続とGitHubへのアクセスのためのssh-keygenを理解する

  26. 26

    MinikubeのVMにSSHで接続する方法を教えてください。

  27. 27

    ssh:ホストへの接続接続がタイムアウトしました

  28. 28

    マネージドIDを使用したAzure SQLへのEF Core接続

  29. 29

    SSHを使用してVM(GCE)に接続できません

ホットタグ

アーカイブ