unable to define ssh key when using terraform to create linux vm

506 Views Asked by At

I'm trying to use terraform to create linux vm. what I see online is pretty straight forward

resource "tls_private_key" "this" {
  for_each = local.worker_env_map
  algorithm = "RSA"
  rsa_bits  = 4096
}

resource "azurerm_linux_virtual_machine" "example" {
  name                = "worker-machine"
  resource_group_name = "rogertest"
  location            = "australiaeast"
  size                = "Standard_D2_v4"
  admin_username = data.azurerm_key_vault_secret.kafkausername.value
  network_interface_ids = [
    azurerm_network_interface.example.id,
  ]

  admin_ssh_key {
    username   = "adminuser"
    public_key = tls_private_key.this["env1"].public_key_openssh
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "18_04-lts-gen2"
    version   = "latest"
  }
}

but i'm keep getting this error

Code="InvalidParameter" Message="Destination path for SSH public keys is currently limited to its default value /home/kafkaadmin/.ssh/authorized_keys  due to a known issue in Linux provisioning agent." 
Target="linuxConfiguration.ssh.publicKeys.path"

but I'm following as exactly outline on this page?

https://learn.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-terraform

1

There are 1 best solutions below

0
Komali Annem On

I tired to reproduce the same issue in my environment and got the below results

This is the error I am getting for destination path for SSH public keys are currently limited to its default value, destination path on the VM for the SSH keys if the file is already exist the specific keys are appended to the file

If we need a non-default location for public keys then at the moment, the only way is to create our own custom solution.

I have used the below command to create own path for keys

az vm create --resource-group rg_name --name myVM --image UbuntuLTS --admin-username user_name --generate-ssh-keys --ssh-dest-key-path './'

I have the Linux-vm terraform code using this Document

I have followed the below steps to execute the file

terraform init

Using the above command it will initialize the file

enter image description here

terraform plan

This will creates an execution plan and it will preview the changes that terraform plans to make the infrastructure it will show the monitoring and email notification rules

enter image description here

terraform apply

This will creates or updates the infrastructure depending on the configuration and also creates the metric rules for the flexible server

enter image description here enter image description here

I am able to see the created Linux-virtual machine

enter image description here

NOTE: For creating Linux-vm we can use this terraform Document also for reference