Статьи

Создание пары ключей SSH для развертывания виртуальной машины Linux в Windows Azure

Для развертывания Linux в Windows Azure требуется открытый ключ x509 в кодировке PEM или DER, чтобы включить аутентифицированный удаленный вход через SSH. Этот пост дополняет http://www.windowsazure.com/en-us/manage/linux/how-to-guides/ssh-into-linux/ и включает генерацию ключа в простой сценарий оболочки как в Linux, так и в Windows.

В этой статье мы сгенерируем самоподписанную пару открытый / закрытый kley для тестирования с использованием openssl, который будет использоваться при подготовке виртуальной машины Linux. Сгенерированный закрытый ключ можно использовать для подключения к Linux с помощью команды ssh из Linux или использования Putty.exe в качестве клиента SSH в Linux или Windows.

В этой статье «Linux» и «Ubuntu» используются взаимозаменяемо; Ubuntu 11.10 использовался для тестирования этого процесса. Ниже приведены подробные инструкции по созданию пары ключей SSH, совместимой с Windows Azure, в Ubuntu и Windows:

Linux (Ubuntu)


На локальном компьютере Linux установите openssl, если он еще не существует, с помощью следующей команды:

apt-get install openssl 

Приведенная выше команда должна привести openssl к последней версии. Описанный здесь процесс генерации ключа был протестирован с OpenSSL 1.0.1c.


Проверьте установленную версию, выполнив команду оболочки:

openssl version –v

Ниже приведен скрипт bash для генерации пары ключей; давайте сохраним это в файле с именем gensshkey.sh:

gensshkey.sh:

#!/bin/bash
REQUIRED_ARGS=1
E_NOT_ENOUGH_ARGS=65

#first argument will be used as the key prefix
#second argument is optional and if given will be used as a pass #phrase for DES3 protection of the private key
case $# in
  1)
  openssl req -x509  -days 365 -newkey rsa:2048 -keyout $1sshpvt.pem -out $1pub.pem -nodes
  openssl rsa -in $1sshpvt.pem -out $1pvt.pem
  ;;
  2)
  openssl req -x509  -days 365 -newkey rsa:2048 -keyout $1sshpvt.pem -out $1pub.pem -passout pass:$2
  openssl rsa -in $1sshpvt.pem -passin pass:$2 -out $1pvt.pem -des3 -passout pass:$2
  ;;
 
  *)
  echo "Usage for unprotected private key: gensshkey.sh <key_prefix>"
  echo "Example: gensshkey.sh \"db\""
  echo "Usage for password protected private key: gensshkey.sh <key_prefix> <pass phrase>"
  echo "Example: gensshkey.sh db pass@word1"
  exit $E_NOT_ENOUGH_ARGS
  ;;
esac
echo "generated $1sshpvt.pem, $1pub.pem and $1pvt.pem"

gensshkey.sh принимает два аргумента командной строки: префикс ключа и пароль, как показано ниже:

gensshkey.sh db pass@word1 

Выполнение команды openssl через вышеприведенный скрипт запросит гео и личную информацию, для которой могут быть приняты значения по умолчанию. Введенные вами значения никак не повлияют на целостность ключей. Это сгенерирует dbsshkey.pem, dbpvt.pem и dbpub.pem с закрытым ключом DES3, зашифрованным парольной фразой «pass @ word1».

gensshkey.sh также может быть использован для генерации открытого ключа закрытого ключа (не рекомендуется для реального производственного использования), пропуская парольную фразу, как показано ниже:

gensshkey.sh db 

Сгенерированный выше файл dbsshkey.pem можно использовать с командой ssh ​​из локальной коробки Linux. Но сначала нам нужно ограничить права доступа к этому ключевому файлу; в противном случае ssh будет жаловаться, что ключ слишком открыт. Ниже приведена последовательность команд:

chmod 600 dhsshkey.pem
ssh -i dbsshkey.pem -p <ssh_port> <machine_name.cloudapp.net

Если вы предпочитаете putty.exe в качестве SSH-клиента, используйте dbpvt.pem, чтобы преобразовать его в формат .PPK (из меню «Преобразования -> Импортировать ключ -> Сохранить личный ключ на панели инструментов»), используя puttygen.exe и используйте .ppk файл с putty.exe для аутентификации клиента. Использование файла puttygen.exe описано здесь: http://www.windowsazure.com/en-us/manag e / linux / руководство по использованию / ssh-into-linux / .

Процесс подготовки виртуальной машины Linux описан по адресу: http://www.windowsazure.com/en-us/manage/linux/tutorials/virtual-machine-from-gallery/ . На шаге 4 процесса инициализации, показанного на приведенной выше странице, установите флажок «SECURE USING SSH KEY» и предоставьте файл открытого ключа (например, сгенерированный выше dbpub.pem), чтобы механизм инициализации мог внедрить открытый ключ в файл .ssh / папка author_keys.

Windows Server 2008 R2/Windows 7

If you are planning to use generate SSH keys on a Windows client (this was tested on Windows Server 2008 R2; it should work on Windows 7 as well) and use putty.exe on Windows to SSH into an Azure hosted Linux box, here is a simple shell script to help with the keys.

Windows binaries of the openssl can be obtained from http://www.openssl.org/related/binaries.html. The following batch file simplifies the usage of openssl which we will save it as gensshkey_win.cmd.

gensshkey_win.cmd:

@echo off
if "%1" == "" goto error
if "%2" == "" goto nodes
openssl req -x509 -config C:\OpenSSL-Win64\bin\openssl.cfg -days 365 -newkey rsa:2048 -keyout %1sshkey.pem -out %1pub.pem -passout pass:%2
openssl rsa -in %1sshkey.pem -passin pass:%2 -out %1pvt.pem -des3 -passout pass:%2
echo "generated" %1sshkey.pem, %1pub.pem and %1pvt.pem
goto eof

:nodes
openssl req -x509 -config C:\OpenSSL-Win64\bin\openssl.cfg -days 365 -newkey rsa:2048 -keyout %1sshkey.pem -out %1pub.pem -nodes
openssl rsa -in %1sshkey.pem -out %1pvt.pem
echo "generated" %1sshkey.pem, %1pub.pem and %1pvt.pem
goto eof

:error
echo "usage: gensshkey_win <key prefix> <optional pass phrase>"
echo "key prefix used to prefix the generated files; use a prefix that represent your key usage"
echo "example: gensshkey_win db pass@word1
echo "example: gensshkey_win db

:eof

 Execute the following command to generate a pass phrase protected key pair:

gensshkey_win.cmd db pass@word1 

Execution of the openssl through the above command will prompt for geo and personal information as mentioned previously; just hit ENTER if you are ok with the defaults.

This will generate dbsshkey.pem, dbpvt.pem and dbpub.pem with the private key DES3 encrypted with pass phrase “pass@word1” similar to the openssl process on Linux.

For clear text private key, invoke the above shell script with just the prefix as shown below.

gensshkey_win.cmd db

dbsshkey.pem thus generated can be used from within Linux to connect to other Linux instances using ssh command. dbpvt.pem can be used to convert it to .PPK format through puttygen.exe for using  putty.exe usage as the SSH client on Windows and Linux.

For more Linux on Windows Azure related information visit: http://www.windowsazure.com/en-us/manage/linux/.