Аутентификация с помощью открытого ключа SSH в Linux Azure DSVM через R

Я пытаюсь использовать пакет R AzureDSVM для создания Linux DSVM через R. Я читаю руководство https://raw.githubusercontent.com/Azure/AzureDSVM/master/vignettes/10Deploy.Rmd (руководство по Azure DSVM)

Сначала руководство запрашивает создание приложения Azure Active Directory, в котором будут указаны "идентификатор клиента", "идентификатор клиента" и "ключ пользователя", рекомендации, описанные в http://htmlpreview.github.io/?https://github.com/Microsoft/AzureSMR/blob/master/inst/doc/Authentication.html (руководство по аутентификации SMR Azure)

Насколько я понимаю, это создает приложение, зарегистрированное в Azure Active Directory, создает "ключ аутентификации" для приложения, которым является ключ пользователя, и связывает приложение с группой ресурсов. Я сделал это успешно.

Затем руководство Azure DSVM создает виртуальную машину с аутентификацией с открытым ключом, аналогично следующему:

library(AzureSMR) 
library(AzureDSVM)   

TID <- "123abc"          # Tenant ID
CID <- "456def"          # Client ID
KEY <- "789ghi"          # User key

context <- createAzureContext(tenantID=TID, clientID=CID, authKey=KEY)

resourceGroup<-"myResouceGroup"
location<-"myAzureLocation"
vmUsername<-"myVmUsername"
size<-"Standard_D1_v2"
mrsVmPassword<-"myVmPassword"
hostname<-"myVmHostname"

ldsvm <- deployDSVM(context, 
                    resource.group = resourceGroup,
                    location       = location,
                    hostname       = hostname,
                    username       = vmUsername,
                    size           = size,
                    os = "Ubuntu",
                    pubkey         = PUBKEY)

В руководстве смутно описывается создание открытого ключа (PUBKEY) из личного ключа пользователя, который отправляется на виртуальную машину, чтобы она могла обеспечить аутентификацию SSH:

Для начала нам нужно загрузить наши учетные данные Azure, а также открытый ключ пользователя ssh. Открытые ключи в Linux обычно создаются на настольном компьютере / ноутбуке пользователя и находятся в ~ /.ssh / id_rsa.pub. Будет удобно создать файл учетных данных, который будет содержать эту информацию. Содержимое файла учетных данных будет выглядеть примерно так: мы предполагаем, что пользователь создает такой файл в текущем рабочем каталоге, называя файл _credentials.R. Замените на имя пользователя пользователя.

TID <- "72f9....db47"          # Tenant ID
CID <- "9c52....074a"          # Client ID
KEY <- "9Efb....4nwV....ASa8=" # User key

PUBKEY   <- readLines("~/.ssh/id_rsa.pub") # For Linux DSVM

Мой вопрос:

Этот открытый ключ PUBKEY генерируется из ключа аутентификации / пользователя, созданного путем настройки приложения Azure Active Directory в руководстве по аутентификации SMR Azure (переменная KEY в приведенном выше сценарии)? Если так, то как? Я пытался использовать библиотеку натрия R pubkey(charToRaw(KEY)) чтобы сделать это, но я получаю "Неверный ключ, должен быть ровно 32 байта".

Если PUBKEY не генерируется из KEY, из чего он генерируется? И как пакет узнает, как пройти аутентификацию с помощью закрытого ключа для этого открытого ключа?

2 ответа

Решение

Ключ AAD используется для аутентификации в AAD. Пара открытых / закрытых ключей является отдельной и используется для аутентификации на виртуальной машине. Если у вас нет открытого ключа (в файле ~/.ssh/id_rsa.pub), вы можете создать его с помощью ssh-keygen в Linux.

Соединения SSH по умолчанию используют закрытый ключ (в ~/.ssh/id_rsa).

Пара вещей в дополнение к (правильному) ответу Пола Шили:

ssh-keygen также устанавливается в последних версиях Windows 10 Pro, наряду с ssh, scp и curl. В противном случае у вас, вероятно, установлен клиент Putty ssh, и в этом случае вы можете использовать puttygen для сохранения пары открытый / закрытый ключ.

AzureDSVM довольно старый и зависит от AzureSMR, который больше не поддерживается. Если вы хотите развернуть DSVM, я бы рекомендовал использовать пакет AzureVM, который находится на CRAN и GitHub. Это, в свою очередь, основывается на пакете AzureRMR, который обеспечивает общую основу для управления ресурсами Azure.

library(AzureVM)
az <- AzureRMR::az_rm$new(tenant="youraadtenant", app="yourapp_id", password="password")
sub <- az$get_subscription("subscription_id")
rg <- sub$get_resource_group("rgname")

vm <- rg$create_vm(os="Ubuntu",
    username="yourname",
    passkey=readLines("~/.ssh/id_rsa.pub"),
    userauth_type="key")

Посмотрите на виньетки AzureRMR и AzureVM для получения дополнительной информации.

Отказ от ответственности: я являюсь автором AzureRMR и AzureVM.

Другие вопросы по тегам