Установка adminPassword не эффективна; Linux развернут в диспетчере ресурсов Azure - PullRequest
0 голосов
/ 10 сентября 2018

Я использую шаблоны ARM для развертывания Linux-машин. Внутри моего Microsoft.Compute/virtualMachines развертывания у меня есть свойства, включающие это (следующие документы )

    "osProfile": {
        "computerName": "computer-name-here",
        "adminUsername": "[parameters('AdminUserName')]",
        "adminPassword": "password following rules here",
        "linuxConfiguration": {
           "disablePasswordAuthentication": false
        }
        "secrets": []
    },

Проблема в том, что вход в систему с этим именем пользователя и паролем не работает с виртуальной машиной.

Когда машина вращается, то ssh user@host завершается неудачно, говоря, что аутентификация с открытым ключом завершилась неудачно. Когда я использую специальные флаги для запроса пароля, результат тот же.

Когда я проверяю сценарий автоматизации для виртуальной машины, я вижу, что мои свойства получены, но adminPassword отсутствует. Я предполагаю, что они удаляют это из консоли для безопасности, но SSH-клиент наверняка заставляет его выглядеть так, будто он игнорирует мои настроенные параметры и разрешает доступ только по ssh-ключу.

Возможно ли использовать имя пользователя / пароль с помощью Azure или я что-то пропустил?

РЕДАКТИРОВАТЬ Подробнее:

Способ генерирования моего osProfile - через шаблон, который делает это: (обратите внимание, я добавляю «пароль» к имени пользователя, чтобы убедиться, что замены правильны)

    "authConfig-sshpublickey": {
        "adminUsername": "[concat('pubkey-',parameters('AdminUserName'))]",
        "adminPassword": "",
        "linuxConfiguration": {
            "disablePasswordAuthentication": true,
            "ssh": {
                "publicKeys": [
                    {
                        "path": "[concat('/home/', parameters('AdminUserName'),'/.ssh/authorized_keys')]",
                        "keyData": "[parameters('AdminCredential')]"
                    }
                ]
            }
        }
    },
    "authConfig-password": {
        "adminUsername": "[concat('password-',parameters('AdminUserName'))]",
        "linuxConfiguration": null,
        "adminPassword": "[parameters('AdminCredential')]"
    },
    "authConfig": "[variables(concat('authConfig-',parameters('AdminAuthType')))]"

Затем я устанавливаю его в виртуальной машине так:

    "osProfile": {
        "computerName": "[concat(variables('namePrefixes').vm, '-', copyIndex())]",
        "adminUsername": "[variables('authConfig').adminUsername]",
        "adminPassword": "[variables('authConfig').adminPassword]",
        "linuxConfiguration": "[variables('authConfig').linuxConfiguration]"
    },

Поскольку во время выполнения я использую AdminAuthType = пароль, он подменяет его.

Я запускаю шаблон, он правильно настраивает всю мою инфраструктуру, затем я захожу в консоль Azure, проверяю скрипт автоматизации на наличие получаемых виртуальных машин и вижу следующее:

            "osProfile": {
                "computerName": "[parameters('extra stuff here')]",
                "adminUsername": "password-myuser",
                "linuxConfiguration": {
                    "disablePasswordAuthentication": false
                },
                "secrets": []
            },

Итак, выводы:

  1. Подставляет на основе пароля аутентификацию
  2. Он подключает linuxConfiguration, когда я прямо сказал, что нет.
  3. adminPassword не отображается в скрипте автоматизации, но, как уже было сказано ранее, я не уверен, что это из соображений безопасности, или он никогда не делает это на самом деле.

1 Ответ

0 голосов
/ 11 сентября 2018

Точный ответ - да, войти в систему можно с помощью имени пользователя / пароля в Azure. С помощью размещенного вами шаблона вы можете просто игнорировать свойства "linuxConfiguration" и "секреты". Простой шаблон может быть таким:

"osProfile": {
                    "computerName": "[variables('vmName')]",
                    "adminUsername": "[parameters('adminUsername')]",
                    "adminPassword": "[parameters('adminPassword')]"
                },

Без свойства linuxConfiguration, чтобы ключ ssh не был настроен. И весь пример шаблона ниже:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "adminUsername": {
            "type": "string",
            "metadata": {
                "description": "User name for the Virtual Machine."
            }
        },
        "adminPassword": {
            "type": "securestring",
            "metadata": {
                "description": "Password for the Virtual Machine."
            }
        },
        "dnsLabelPrefix": {
            "type": "string",
            "metadata": {
                "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
            }
        },
        "ubuntuOSVersion": {
            "type": "string",
            "defaultValue": "16.04.0-LTS",
            "allowedValues": [
                "12.04.5-LTS",
                "14.04.5-LTS",
                "15.10",
                "16.04.0-LTS"
            ],
            "metadata": {
                "description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version."
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Location for all resources."
            }
        }
    },
    "variables": {
        "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
        "imagePublisher": "Canonical",
        "imageOffer": "UbuntuServer",
        "nicName": "myVMNic",
        "addressPrefix": "10.0.0.0/16",
        "subnetName": "Subnet",
        "subnetPrefix": "10.0.0.0/24",
        "storageAccountType": "Standard_LRS",
        "publicIPAddressName": "myPublicIP",
        "publicIPAddressType": "Dynamic",
        "vmName": "MyUbuntuVM",
        "vmSize": "Standard_A1",
        "virtualNetworkName": "MyVNET",
        "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]"
    },
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageAccountName')]",
            "apiVersion": "2017-06-01",
            "location": "[parameters('location')]",
            "sku": {
                "name": "[variables('storageAccountType')]"
            },
            "kind": "Storage",
            "properties": {}
        },
        {
            "apiVersion": "2017-04-01",
            "type": "Microsoft.Network/publicIPAddresses",
            "name": "[variables('publicIPAddressName')]",
            "location": "[parameters('location')]",
            "properties": {
                "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
                "dnsSettings": {
                    "domainNameLabel": "[parameters('dnsLabelPrefix')]"
                }
            }
        },
        {
            "apiVersion": "2017-04-01",
            "type": "Microsoft.Network/virtualNetworks",
            "name": "[variables('virtualNetworkName')]",
            "location": "[parameters('location')]",
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "[variables('addressPrefix')]"
                    ]
                },
                "subnets": [
                    {
                        "name": "[variables('subnetName')]",
                        "properties": {
                            "addressPrefix": "[variables('subnetPrefix')]"
                        }
                    }
                ]
            }
        },
        {
            "apiVersion": "2017-04-01",
            "type": "Microsoft.Network/networkInterfaces",
            "name": "[variables('nicName')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
                "[resourceId('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
            ],
            "properties": {
                "ipConfigurations": [
                    {
                        "name": "ipconfig1",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "publicIPAddress": {
                                "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
                            },
                            "subnet": {
                                "id": "[variables('subnetRef')]"
                            }
                        }
                    }
                ]
            }
        },
        {
            "apiVersion": "2017-03-30",
            "type": "Microsoft.Compute/virtualMachines",
            "name": "[variables('vmName')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
                "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
            ],
            "properties": {
                "hardwareProfile": {
                    "vmSize": "[variables('vmSize')]"
                },
                "osProfile": {
                    "computerName": "[variables('vmName')]",
                    "adminUsername": "[parameters('adminUsername')]",
                    "adminPassword": "[parameters('adminPassword')]"
                },
                "storageProfile": {
                    "imageReference": {
                        "publisher": "[variables('imagePublisher')]",
                        "offer": "[variables('imageOffer')]",
                        "sku": "[parameters('ubuntuOSVersion')]",
                        "version": "latest"
                    },
                    "osDisk": {
                        "createOption": "FromImage"
                    },
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                        }
                    ]
                },
                "diagnosticsProfile": {
                    "bootDiagnostics": {
                        "enabled": true,
                        "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
                    }
                }
            }
        }
    ],
    "outputs": {
        "hostname": {
            "type": "string",
            "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
        },
        "sshCommand": {
            "type": "string",
            "value": "[concat('ssh ', parameters('adminUsername'), '@', reference(variables('publicIPAddressName')).dnsSettings.fqdn)]"
        }
    }
}

Кроме того, правила NSG будут проверять, разрешает ли трафик. Надеюсь, это поможет вам.

Обновление

Когда вы создаете виртуальную машину с паролем, конфигурация пароля в шаблоне после создания виртуальной машины будет выглядеть ниже, и вы не сможете увидеть пароль из-за безопасности:

enter image description here

Если вы создадите виртуальную машину с открытым ключом ssh, она будет выглядеть так:

enter image description here

Вы задали оба способа аутентификации в опубликованном вами шаблоне, который вы используете для создания виртуальной машины. Пожалуйста, выберите один для установки. Если вы выбираете пароль, следуйте шаблону, который я разместил выше.

...