Ниже приведено определение ресурса виртуальной машины в шаблоне моей руки.
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[variables('nicName')]",
"[variables('imageName')]"
],
"tags": {
"displayName": "VirtualMachine"
},
"identity": {
"type": "SystemAssigned"
},
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSize')]"
},
"osProfile": "[variables(parameters('authenticationType'))]",
"storageProfile": {
"imageReference": {
"id": "[resourceId('Microsoft.Compute/images', variables('imageName'))]"
},
"osDisk": {
"managedDisk": {
"storageAccountType": "Premium_LRS"
},
"createOption": "fromImage",
"diskSizeGB": 64
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
}
]
}
},
"resources": [
{
"type": "Extensions",
"apiVersion": "2018-04-01",
"name": "ExtensionForConfiguringCP",
"location": "[parameters('location')]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.0",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"[variables('scriptFileURL')]"
]
},
"protectedSettings": {
"commandToExecute": "[format('sh {0} \"{1}\" \"{2}\" \"{3}\" \"{4}\" \"{5}\" \"{6}\" \"{7}\"', variables('cpscriptFileName'), parameters('isProxy'), parameters('httpProxy'), parameters('httpsProxy'), parameters('noProxy'), parameters('cpUsername'), variables('keyVaultName'), union(if(not(equals(parameters('publicIpNewOrExisting'), 'none')), array(reference(parameters('publicIpName')).dnsSettings.fqdn) , array('')),variables('splitHostnames')))]"
}
}
}
]
Вы видите, что я передаю несколько аргументов скрипту через атрибут commandToExecute. Я наблюдаю, что значения аргументов, которые передаются в сценарий, решают, могу ли я иметь root доступ к виртуальной машине или нет. Пример: если у меня есть команда для выполнения следующим образом, я могу получить доступ к виртуальной машине как root с помощью sudo su
"commandToExecute": "[format('sh {0} \"{1}\" \"{2}\" \"{3}\" \"{4}\" \"{5}\" \"{6}\" \"{7}\"', variables('cpscriptFileName'), parameters('isProxy'), parameters('httpProxy'), parameters('httpsProxy'), parameters('noProxy'), parameters('cpUsername'), variables('keyVaultName'), variables('splitHostnames'))]"
В моем сценарии пользователь может решить, подключать ли publi * 1023 или нет. * ip для vm. Если publicip подключен к vm, тогда я хочу, чтобы имя fqdn и другие имена хостов, которые пользователь передает как значения, разделенные запятыми, были частью сертификата tls, который обрабатывает скрипт.
Для обработки пустого или непустого fqdn У меня есть if(not(equals(parameters('publicIpNewOrExisting'), 'none')), array(reference(parameters('publicIpName')).dnsSettings.fqdn) , array(''))
и функция объединения для обработки дублирующейся записи пользователем в именах хостов, если он снова вводит тот же самый fqdn.
У меня нет доступа к проверке stderr или stdout логи на /var/lib/waagent/custom-script/download/0/
.
Из портала vm-> extensions я вижу, что скрипт успешно запущен.
Все, что я хочу знать, это то, почему изменение этих значений вызывает root проблема с доступом на виртуальной машине? Для меня это выглядит очень странно, и я думаю, что могу сделать глупую ошибку, которую azure не может выделить. Я также проверил /var/log/azure/custom-script/handler.log
и не вижу там никаких ошибок.