Если я создам виртуальную машину Azure Linux с помощью PowerShell, как мне получить ее новый ключ узла ssh, чтобы установить ее в моем локальном ssh/putty? Предпочтительно, чтобы решение также представляло собой код PowerShell.
Как получить ключ узла ssh для новой виртуальной машины Azure Linux, созданной с помощью PowerShell?
Ответы (6)
Старый вопрос, но для новичков в настоящее время доступна альтернатива с помощью команды запуска в Azure CLI. Возможно, для PowerShell тоже есть аналог, но я его не исследовал.
az vm run-command invoke --name <your-vm-name> --command-id RunShellScript --scripts "cat /etc/ssh/ssh_host_ecdsa_key.pub"
выведет документ json, из которого вы можете извлечь открытый ключ. Имейте в виду, что этот процесс невероятно медленный (~ 30 секунд на хост), но вам нужно запустить его только один раз. См. эту суть в качестве примера того, как обновить файл known_hosts с помощью Ansible.
-g
(или --resource-group
), кроме этого, да, это сработает, большое спасибо!
- person wvxvw; 16.10.2018
Вы можете использовать новую < em>функция «Выполнить команду» портала Azure.
- На странице виртуальной машины перейдите к "Выполнить команду" в разделе "Операции" меню виртуальной машины.
- Выберите команду "RunShellScript".
Вставьте следующую команду:
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -f "$f"; done
Вы получите вывод, например:
Enable succeeded: [stdout] 256 SHA256:bKKCom8yh5gOuBNWaHHJ3rrnRXmCOAyPN/WximYEPAU /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA) 256 SHA256:IYeDl+gseYk46Acg4g2mcXGvCr7Z8FqOd+pCJz/KLHg /etc/ssh/ssh_host_ed25519_key.pub (ED25519) 2048 SHA256:rA0lIXvHqFq7VHKQCqHwjsj28kw+tO0g/X4KnPpEjMk root@myazurevm (RSA) [stderr]
(набор типов ключей зависит от вашего образа ВМ)
Эту функцию также можно использовать через Azure CLI, что показано в ссылке выше, а также в ответе @mwik.
Ознакомьтесь также с моим полным руководством по безопасному подключению к службе Microsoft Azure с помощью SFTP.
Ключи RSA, DSA, ECDSA и ED25519 генерируются при первой загрузке и доступны в журнале диагностики загрузки.
Если вы не поймаете его при первой загрузке, я не думаю, что он указан где-либо еще на портале. Есть только один возможный, безопасный вариант, который я могу придумать для восстановления отпечатка пальца для уже развернутой виртуальной машины.
Создайте новую виртуальную машину.
Прикрепите виртуальный жесткий диск виртуальной машины, для которой вам нужен отпечаток пальца.
Проверьте подключение к новой виртуальной машине с помощью отпечатка пальца в диагностике загрузки.
Проверьте отпечаток сгенерированного файла
/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. ="Список ключей">изображение. При этом мы можем вручную вычислить отпечаток, представленный 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('-', ':');
}
Окна
Инструкции по безопасному подключению к виртуальной машине Windows с помощью RDP см. в моем ответе на этот вопрос StackOverflow.
Write-Host ([BitConverter]::ToString([Security.Cryptography.MD5]::Create().ComputeHash([Convert]::FromBase64String("<base-64-encoded-key-here>"))) -replace "-", ":").ToLower()
. Источник: winscp.net/eng/docs/guide_microsoft_azure#linux
- person Martin Prikryl; 21.12.2016
Возможно, это ты ищешь. Я попробую это с вами на моем аккаунте прямо сейчас.
В основном похоже, что вам нужно прикрепить .pem
при создании.
Это должно дать отпечаток вашего сертификата.
Пример виртуальной машины 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 'somepass@1' -Certificates $cert1 | New-AzureVM -ServiceName $service
Пример виртуальной машины Linux
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 'somepass@1' -SSHPublicKeys $sshKey |
New-AzureVM -ServiceName $service
Примечание. Параметры -Certificates и -SSHPublicKeys представляют собой массивы, поэтому они могут принимать несколько сертификатов. -SSHPublicKeys$sshKey1,$sshKey2
Для Linux также есть параметр -SSHKeyPairs для передачи пары ключей вместо открытого ключа. -Сертификаты могут обрабатывать оба типа в Windows.
В их справочном документе есть страница, рассказывающая о том, как сбросить пароль или ключ ssh:
https://docs.microsoft.com/en-us/azure/virtual-machines/linux/troubleshoot-ssh-connection