Переписать вопрос
Когда я использую 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. - Как сменить пользователя?