Если я создам виртуальную машину Azure Linux с помощью PowerShell, как я могу получить ее новый ключ ssh-хоста, чтобы я мог установить ее в локальную ssh/putty? Предпочтительным решением является также код PowerShell.
Как я могу получить ключ хоста ssh для новой виртуальной машины Azure Linux, созданной с помощью PowerShell?
Ответ 1
Клавиши RSA, DSA, ECDSA и ED25519 генерируются при первой загрузке и доступны в журнале диагностики загрузки.
Если вы не поймаете его при первой загрузке, я не думаю, что он указан нигде в портале. Там только один возможный, безопасный вариант, о котором я могу думать, для восстановления отпечатка пальца для уже развернутой виртуальной машины.
- Создайте новую виртуальную машину.
- Прикрепите VHD виртуальной машины, для которой вам нужен отпечаток.
- Проверьте подключение к новой виртуальной машине с помощью отпечатка пальца в диагностике загрузки.
-
Проверьте отпечаток пальца для сгенерированного файла
/etc/ssh/ssh_host_rsa_key.pub
на другом диске.ssh-keygen -lf /{path}/ssh_host_rsa_key.pub
Вам может потребоваться добавить переключатель -E md5
, если вам нужен хэш-код MD5 с шестнадцатеричным кодированием.
PowerShell
Получить данные диагностики загрузки через PowerShell:
Get-AzureRmVMBootDiagnosticsData -ResourceGroupName ExampleGroup -Name TestLab -Linux
Соединение с Putty
Azure вычисляет отпечатки пальца хоста в виде кодированной в Base64 строки SHA-256 хэш открытого ключа. Когда вы пытаетесь подключиться с помощью Putty, он отображает отпечаток в виде шестнадцатеричной кодированной строки MD5 хэш открытого ключа.
К счастью, Azure также перечисляет полный открытый ключ в журнале диагностики загрузки, где он говорит BEGIN SSH HOST KEY KEYS
во втором image. При этом мы можем вручную вычислить отпечаток пальца, как это описано Putty.
С#
static string ComputeMD5FingerprintFromBase64(string encoded)
{
// Convert Base64 string to byte array.
byte[] pub = Convert.FromBase64String(encoded);
// Compute MD5 hash.
HashAlgorithm md5 = MD5.Create();
byte[] hash = md5.ComputeHash(pub);
return BitConverter.ToString(hash).Replace('-', ':');
}
Ответ 2
Я отправил этот вопрос в поддержку Azure. Они отправили мне эту ссылку на информацию об сканере отпечатков пальцев. Когда я объяснил, что такое ssh, и пояснил, что они сказали
... эта проблема выпадает из границы поддержки от поддержки платформы Azure...
Кто-нибудь другой, кроме Лазури, мог бы дать мне это? Они являются единственными с известным защищенным соединением с новой виртуальной машиной.
Ответ 3
Возможно, это именно то, что вы ищете. Я попробую его с вами в моем аккаунте прямо сейчас.
В принципе, похоже, что вам нужно прикрепить .pem
при создании.
Ответ 4
Пример виртуальной машины Windows
Select-AzureSubscription mysub
$service = 'yourservicename1'
$location = 'West US'
New-AzureService -ServiceName $service -Location $location
Add-AzureCertificate -CertToDeploy 'D:User-DatadevelopmentAzure Samplesmlwdevcert.cer' -ServiceName $service
$cert1 = New-AzureCertificateSetting -Thumbprint D7BECD4D63EBAF86023BB4F1A5FBF5C2C924902A -StoreName 'My'
New-AzureVMConfig -ImageName 'MSFT__Windows-Server-2012-Datacenter-201208.01-en.us-30GB.vhd' -InstanceSize 'Small' -Name 'win2012cert' |
Add-AzureProvisioningConfig -Windows -Password '[email protected]' -Certificates $cert1 | New-AzureVM -ServiceName $service
Пример Linux VM
Select-AzureSubscription mysub
$service = 'yourservicename1'
$location = 'West US'
New-AzureService -ServiceName $service -Location $location
Add-AzureCertificate -CertToDeploy 'D:User-DatadevelopmentAzure Samplesmlwdevcert.cer' -ServiceName $service
$sshkey = New-AzureSSHKey -PublicKey -Fingerprint D7BECD4D63EBAF86023BB4F1A5FBF5C2C924902A -Path '/home/admin/.ssh/authorized_keys'
New-AzureVMConfig -ImageName 'CANONICAL__Canonical-Ubuntu-12-04-amd64-server-20120528.1.3-en-us-30GB.vhd' -InstanceSize 'Small' -Name 'linuxwithcert' |
Add-AzureProvisioningConfig -Linux -LinuxUser 'mwasham' -Password '[email protected]' -SSHPublicKeys $sshKey |
New-AzureVM -ServiceName $service
Примечание. Параметры -Certificates и -SSHPublicKeys являются массивами, поэтому они могут принимать несколько сертификатов. -SSHPublicKeys $sshKey1, $sshKey2
Для Linux существует также параметр -SSHKeyPairs для передачи пары ключей вместо простого открытого ключа. -Сертификаты могут обрабатывать оба типа в Windows.
Ответ 5
В своем справочном документе есть страница о том, как reset пароль или ssh:
https://docs.microsoft.com/en-us/azure/virtual-machines/linux/troubleshoot-ssh-connection