Ansible Не удается подключиться к виртуальной машине Azure, созданной Ansible - PullRequest
1 голос
/ 02 июля 2019

Переписать вопрос

Когда я использую azure_rm – Azure Resource Manager inventory plugin, как я могу изменить пользователя ssh, подключающегося к виртуальной машине Azure?

Старый вопрос

Я беспокоился, чтоAnsible в моей облачной оболочке Azure не может подключиться к виртуальной машине Azure, созданной Playsbook Ansible.Другой Ansible может подключить виртуальную машину Azure, созданную из командной строки.В чем разница с виртуальной машиной?

Я создал 2 виртуальные машины Azure.Один по пьесе Ansible.Другой - из командной строки az vm create.

Сборник пьес Ansible create_vm_for_the_developers.yaml

- name: Create Azure VM
  hosts: localhost
  connection: local
  vars_prompt:
    - name: "ResourceGroup"
      prompt: "Please input your resourcegroup"
      default: "defaultResourceGroupForVM" 
      private: no
    - name: "domain_name"
      prompt: "Please input your domain"
      default: "foobardomain" 
      private: no
    - name: "subscription_id"
      prompt: "Please input your subscription_id"
      default: "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
      private: no
  tasks:
  - name: Create resource group
    azure_rm_resourcegroup:
      name:  "{{ ResourceGroup }}"
      location: eastus
      subscription_id: "{{subscription_id}}"
  - name: Create virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ ResourceGroup }}"
      name: myVnet
      address_prefixes: "10.0.0.0/16"
      subscription_id: "{{subscription_id}}"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ ResourceGroup }}"
      name: mySubnet
      address_prefix: "10.0.1.0/24"
      virtual_network: myVnet
      subscription_id: "{{subscription_id}}"
  - name: Create public IP address
    azure_rm_publicipaddress:
      resource_group: "{{ ResourceGroup }}"
      allocation_method: Static
      name: myPublicIP
      subscription_id: "{{subscription_id}}"
    register: output_ip_address
  - name: Dump public IP for VM which will be created
    debug:
      msg: "The public IP is {{ output_ip_address.state.ip_address }}."
  - name: Create Network Security Group that allows SSH
    azure_rm_securitygroup:
      resource_group: "{{ ResourceGroup }}"
      name: myNetworkSecurityGroup
      subscription_id: "{{subscription_id}}"
      rules:
        - name: SSH
          protocol: Tcp
          destination_port_range: 22
          access: Allow
          priority: 1001
          direction: Inbound
  - name: Create virtual network inteface card
    azure_rm_networkinterface:
      resource_group: "{{ ResourceGroup }}"
      subscription_id: "{{subscription_id}}"
      name: myNIC
      virtual_network: myVnet
      subnet: mySubnet
      public_ip_name: myPublicIP
      security_group: myNetworkSecurityGroup
      ip_configurations:
      - name: ipconfig1
        public_ip_address_name: myPublicIP
        primary: True
  - name: Create VM
    azure_rm_virtualmachine:
      resource_group: "{{ ResourceGroup }}"
      subscription_id: "{{subscription_id}}"
      name: myVM
      vm_size: Standard_DS1_v2
      admin_username: azureuser
      #admin_password: Azure12345678
      ssh_password_enabled: false
      ssh_public_keys:
        - path: /home/azureuser/.ssh/authorized_keys
          key_data: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"  
      network_interfaces: myNIC
      image:
        offer: CentOS
        publisher: OpenLogic
        sku: '7.5'
        version: latest

Я запускаю команду ansible-playbook create_vm_for_the_developers.yaml и создаю виртуальную машину.

командная строка az vm create

az vm create --resource-group defaultResourceGroupForVM              --name ansible-inventory-test-vm2              --image CentOS  --ssh-key-values ~/.ssh/id_rsa.pub

Я также выполнил указанную выше команду.

Динамические инвентаризации infra_azure_rm.yaml

plugin: azure_rm
include_vm_resource_groups:
- defaultResourceGroupForVM
auth_source: auto
exclude_host_filters:
# excludes hosts that are powered off
- powerstate != 'running'

Я запустил команду

ansible all -m ping -i infra_azure_rm.yaml

Результат ошибки

myVM_caa6 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
    "unreachable": true
}
ansible-inventory-test-vm2_62bd | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

Env

  • в Azure Clound Shell
  • Ansible версия: 2.8.1
  • sshключ создается командой ssh-keygen

PLus Информация

  • Конечно обе виртуальные машины могут быть подключены через ssh.
  • Имя пользователя для sshРазличия между виртуальной машиной, созданной в командной строке, и виртуальной машиной, созданной в Ansible, различаются.Это может быть серьезной проблемой.
  • В режиме динамической инвентаризации мы можем изменить имя пользователя для ssh?

Plus Plus Informatin

  • *Параметр 1060 *azure_rm ad_user предназначен для Azure AD.
  • Как сменить пользователя?

1 Ответ

0 голосов
/ 02 июля 2019

Ошибка показывает, что разрешение отклонено, это означает, что вы можете подключиться к виртуальной машине, но не можете пройти аутентификацию.

Когда вы запускаете команду, вы не устанавливаете имя пользователя, которое использует виртуальная машина, и имя пользователя по умолчанию, возможно, не правильно. Так что это может быть причиной, которая вызывает ошибку. Вы можете попробовать команду, подобную этой, чтобы установить реальное имя пользователя:

ansible all -m ping -i infra_azure_rm.yaml --user=USERNAME

Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...