0

我正在尝试使用 R AzureDSVM 包通过 R 创建 Linux DSVM。我正在阅读指南https://raw.githubusercontent.com/Azure/AzureDSVM/master/vignettes/10Deploy.Rmd(Azure DSVM 指南)

首先,该指南要求您创建一个 Azure Active Directory 应用程序,该应用程序将提供“租户 ID”、“客户端 ID”和“用户密钥”,这些指南在http://htmlpreview.github.io/?https://github中描述.com/Microsoft/AzureSMR/blob/master/inst/doc/Authentication.html(Azure SMR 身份验证指南)

据我了解,这会创建一个在 Azure Active Directory 中注册的应用,为该应用创建一个“身份验证密钥”,即用户密钥,并将该应用与资源组相关联。我已经成功地做到了。

然后,Azure DSVM 指南以类似于以下内容的方式创建具有公钥身份验证的 VM:

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),该私钥被发送到 VM 以允许其提供 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 SMR Auth 指南中设置 Azure Active Directory 应用程序(上述脚本中的 KEY 变量)创建的身份验证/用户密钥生成的吗?如果是这样,怎么做?我尝试使用 R 钠库pubkey(charToRaw(KEY))来执行此操作,但我得到“无效的密钥,必须正好是 32 个字节”。

如果 PUBKEY 不是从 KEY 生成的,它是从什么生成的?包如何知道如何使用该公钥的私钥进行身份验证?

4

2 回答 2

2

AAD 密钥用于向 AAD 进行身份验证。公钥/私钥对是独立的,用于对 VM 进行身份验证。如果您没有公钥(在文件 ~/.ssh/id_rsa.pub 中),您可以在 Linux 上使用ssh-keygen创建一个。

SSH 连接默认使用私钥(在 ~/.ssh/id_rsa 中)。

于 2019-01-24T05:04:33.350 回答
1

除了 Paul Shealy 的(正确)答案之外,还有几件事:

ssh-keygen 以及 ssh、scp 和 curl 也安装在最新版本的 Windows 10 Pro 上。否则,您可能安装了 Putty ssh 客户端,在这种情况下,您可以使用puttygen保存公钥/私钥对。

AzureDSVM 相当陈旧,依赖于不再积极维护的 AzureSMR。如果要部署 DSVM,我建议使用CRANGitHub上的 AzureVM 包。这反过来建立在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")

查看AzureRMRAzureVM小插曲以获取更多信息。

免责声明:我是 AzureRMR 和 AzureVM 的作者。

于 2019-01-24T08:31:23.847 回答