1

我试图通过使用 azure-sdk-for-python 在 Windows Azure 上部署 Linux VM。幸运的是,我能够使用基于密码的身份验证配置 VM,但未能成功使用 SSH 密钥。谁能解释我如何通过 azure-sdk-for-python 配置 ssh 登录?

我在这里找到了使用 ssh 密钥创建 linux vm 的测试代码:(请参阅 _create_vm_linux() 函数) https://github.com/WindowsAzure/azure-sdk-for-python/blob/master/test/azuretest/test_servicemanagementservice .py (这可能不是一个正确的例子,因为它正在测试中,但我想它至少可以工作。)似乎 LinuxConfigurationSet(self, host_name=None, user_name=None, user_password=None, disable_ssh_password_authentication=None) 准备使用 user_name 进行身份验证, user_password 和 ssh。此外,看起来 PublicKey 和 KeyPair 类用于使用密钥配置 SSH 登录。但是,我不清楚这些设置的用法。我想我必须询问有关测试代码的详细信息。

对于 PublicKey,我假设第一个参数是服务管理证书的指纹,第二个参数是 SSH 公钥的本地路径。 pk = PublicKey(SERVICE_CERT_THUMBPRINT, u'/home/unittest/.ssh/authorized_keys') 对于 KeyPair,我假设第一个参数与 PublicKey 相同,第二个参数是 SSH 私钥的本地路径。(我不确定为什么这里需要私钥) pair = KeyPair(SERVICE_CERT_THUMBPRINT, u'/home/unittest/.ssh/id_rsa') 并且密钥对是 x509 证书。

我尝试了这些行,但未能部署 VM。我想我误解了函数的使用。有什么帮助吗?

4

1 回答 1

3

SERVICE_CERT_THUMBPRINT 属于 pem 文件,您必须使用 add_service_certificate 方法上传其 pfx 文件。

您可以使用以下命令生成一组新的密钥:

 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.key -out mycert.pem

这将生成密钥文件和 pem 文件

 openssl pkcs12 -export -in mycert.pem -inkey mycert.key -out mycert.pfx

这将生成 pfx 文件

接下来上传pfx文件

cert_data_path = "/home/swati/keys/mycert.pfx"
with open(cert_data_path, "rb") as bfile:
    cert_data = base64.b64encode(bfile.read())
    cert_format = 'pfx'
    cert_password = ''
    cert_res = sms.add_service_certificate(service_name='qubolecloud',
                        data=cert_data,
                        certificate_format=cert_format,
                        password=cert_password)

使用获取 pem 文件的指纹

openssl x509 -in mycert.pem -sha1 -noout -fingerprint
SHA1 Fingerprint=98:34:21:38:KJ:1E:D8:CC:A8:9E:89:21:DF:D7:5D:34:A7:D1:F2:E1

测试代码中提到的SERVICE_CERT_THUMBPRINT就是这个不带冒号的指纹。

您现在可以使用密钥文件登录机器,例如

ssh -i mycert.key -p 22 username@azurecloud.cloudapp.net

请参阅http://msdn.microsoft.com/library/azure/jj157194.aspx#SSH了解各个字段的含义。随意提问,我花了相当多的时间来完成这个设置。

于 2014-05-23T11:44:40.487 回答