用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍:

证书指纹的用途

证书是 Windows/Linux 远程连接时使用的为验证虚拟机身份的证书。对于 Linux 来讲,即为 SSH 配置的证书;对于 Windows 来讲,即为 RDP 配置的证书。指纹是根据证书生成的唯一识别证书的标识。

用户在通过 RDP 或者 Putty 等 SSH 工具第一次远程访问虚拟机时,该工具会获取到远程服务器的证书指纹,并弹出一个窗口询问是否确认这台虚拟机就是你要访问的。通过对比指纹,能够识别远程访问的主机就是您在 Azure 中创建的虚拟机,避免连接或者管理上的错误。

指纹的生成

细心的用户会发现,如果通过标准镜像或者一般化镜像创建的虚拟机,门户中会显示指纹;而通过磁盘或者未一般化的镜像创建的虚拟机,指纹会显示为空。

指纹信息是在分配系统(provisioning)的过程中,由虚拟机上的代理获取并发送给 Azure Fabric。Fabric 获取到该信息后,显示到门户中。

我们通过下面情况来看看 Linux 中该证书指纹的使用和产生过程:

Linux

从发布镜像创建的虚拟机

门户中信息显示:

使用 putty 第一次 SSH 登录时的提示:

虚拟机系统中 Key 的位置 /etc/ssh/ 以及 fingerprint:

结论:这三个地方的指纹是完全匹配的。

再来看看虚拟机的日志中相关的记录。

/var/log/message 中记录了虚拟机开机后,生成 host key 的日志。/var/log/waagent.log 中也记录了config SSH 的日志。说明创建虚拟机的过程包含了配置证书这个步骤。

/var/log/message:

复制
Mar  9 05:28:13 localhost sshd-keygen: Generating SSH2 RSA host key: [  OK  ]
Mar 9 05:28:13 localhost sshd-keygen: Generating SSH2 ECDSA host key: [ OK ]
Mar 9 05:28:13 localhost sshd-keygen: Generating SSH2 ED25519 host key: [ OK ]
Mar 9 05:28:13 localhost systemd: Started OpenSSH Server Key Generation.
Mar 9 05:28:37 localhost python: 2017/03/09 05:28:37.865062 INFO Create user account if not exists
Mar 9 05:28:39 localhost python: 2017/03/09 05:28:39.056154 INFO Set user password.
Mar 9 05:28:39 localhost python: 2017/03/09 05:28:39.414142 INFO Configure sudoer
Mar 9 05:28:39 localhost python: 2017/03/09 05:28:39.441285 INFO Configure sshd
Mar 9 05:28:39 localhost python: 2017/03/09 05:28:39.445257 INFO Enabled SSH password-based authentication methods.
Mar 9 05:28:39 localhost python: 2017/03/09 05:28:39.449218 INFO Configured SSH client probing to keep connections alive.
Mar 9 05:28:39 localhost systemd: Time has been changed
Mar 9 05:28:39 localhost systemd: Stopping OpenSSH server daemon...
Mar 9 05:28:39 localhost systemd: Stopping OpenSSH Server Key Generation...
Mar 9 05:28:39 localhost systemd: Starting OpenSSH Server Key Generation...
Mar 9 05:28:39 localhost sshd-keygen: Generating SSH2 ECDSA host key: [ OK ]
Mar 9 05:28:39 localhost sshd-keygen: Generating SSH2 ED25519 host key: [ OK ]
Mar 9 05:28:39 localhost systemd: Started OpenSSH Server Key Generation.
Mar 9 05:28:39 localhost systemd: Started OpenSSH server daemon.
Mar 9 05:28:39 localhost systemd: Starting OpenSSH server daemon...

/var/log/waagent.log :

复制
2017/03/09 05:28:37.865062 INFO Create user account if not exists
2017/03/09 05:28:39.056154 INFO Set user password.
2017/03/09 05:28:39.414142 INFO Configure sudoer
2017/03/09 05:28:39.441285 INFO Configure sshd
2017/03/09 05:28:39.445257 INFO Enabled SSH password-based authentication methods.
2017/03/09 05:28:39.449218 INFO Configured SSH client probing to keep connections alive.
2017/03/09 05:28:39.906654 INFO Event: name=WALA, op=Provision, message=Provision succeed
2017/03/09 05:28:41.818551 INFO Provisioning complete

捕获的 Specialized 镜像

大家会发现,specialized 的镜像在创建VM的过程中不会要求指定用户名、密码等信息,是因为虚拟机会使用原有磁盘和系统中的信息,而不需要重新生成,即不会有 provisioning 的部分过程。

创建后,虚拟机在门户中的显示:

第一次 SSH 登录时的提示:

这里的镜像是第一个实验中在线捕获的虚拟机,其使用了和原有系统一样的证书,因此,指纹也是一样的。

系统日志中提示 provisioning 会被忽略,使用已有的配置。

复制
/var/log/waagent.log中也一样。
/var/log/waagent.log
2017/03/09 06:25:43.786494 INFO Resource disk /dev/sdb is mounted at /mnt/resource with ext4
2017/03/09 06:25:43.797982 INFO Clean protocol
2017/03/09 06:25:43.809387 INFO Provisioning already completed, skipping.

Windows

我们再来看看 Windows 中相关的信息存放在哪里:

门户中信息:

RDP连接信息:

Windows 中 Remote Desktop 的信息:

CMD 窗口中输入 mmc | File | Add/Remove Snapshot in | Certificate(Local Computer) | Computer 打开证书管理面板;点击 Remote Desktop | Certificate,双击证书查看 Details 中的 Thumbprint。

指纹为何为空?

前面提到,该信息是在 VM provisioning 过程中发送给 Azure Fabric 的。而通过磁盘或者为一般化的镜像创建的虚拟机,默认是没有分配系统(Provisioning)这个阶段的,因此,fabric 无法获得这个信息,当然就无法显示。

由于这是个仅运行一次的服务,如果创建好的虚拟机,在运行过程中变更了证书,那这里的指纹和证书实际的指纹很可能对应不上,请管理员注意。

有没有对虚拟机使用有什么影响?

该指纹的显示,能在一定程度上帮助客户识别虚拟机的身份。但对虚拟机本身的使用,不会有影响,但建议管理员和用户需要有较高的安全意识,对云上虚拟机进行合理的管理,避免因通过未一般化镜像创建了身份和密码都一样的虚拟机,造成管理上的混乱。

Azure 经典模式中虚拟机证书指纹的生成和作用的更多相关文章

  1. 微软Azure 经典模式下创建内部负载均衡(ILB)

    微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...

  2. Windows Azure 虚拟网络中虚拟机的网络隔离选项

     最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...

  3. 如何扩展 Azure 资源组中虚拟机的 OS 驱动器

    概述 在资源组中通过从 Azure 应用商店部署映像来创建新的虚拟机 (VM) 时,默认的 OS 驱动器空间为 127 GB. 尽管可以将数据磁盘添加到 VM(数量取决于所选择的 SKU),并且我们建 ...

  4. IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解

    IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的. 我们可以通过应用程序池设置管道模式,这项功能对IIS管理员 ...

  5. 通过 Powershell 来替换 ARM 模式下虚拟机的网络接口

    需求描述 客户在部署完 ARM 模式的虚拟机以后,由于误操作在虚拟机内部禁用了网卡导致远程访问虚拟机受到限制,以下是通过 Powershell 命令来替换原有虚拟网络接口实现虚拟网卡重置功能. Not ...

  6. 通过 Powershell 来调整 ARM 模式下虚拟机的尺寸

    需求描述 在部署完 ARM 模式的虚拟机以后,可以通过 PowerShell 命令来调整虚拟机的尺寸,以下是通过 PowerShell 命令来调整 ARM 模式的虚拟机尺寸. Note 本文只限于 A ...

  7. 【虚拟机-部署】通过 Powershell 来调整 ARM 模式下虚拟机的尺寸

    需求描述 在部署完 ARM 模式的虚拟机以后,可以通过 PowerShell 命令来调整虚拟机的尺寸,以下是通过 PowerShell 命令来调整 ARM 模式的虚拟机尺寸. Note 本文只限于 A ...

  8. 【转载】IIS7.5(经典模式)访问静态资源(.css和.js文件)提示:未能执行 URL

    IIS7.5(经典模式)静态资源(.css和.js文件)提示:未能执行 URL “/”应用程序中的服务器错误. 未能执行 URL. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪 ...

  9. ASP.NET运行时详解 集成模式和经典模式

    遗留问题 在<ASP.NET运行时详解 生命周期入口分析>中遗留两个问题,包括Application的InitInternal方法执行细节.IIS6和II7经典模式请求管道管理类Appli ...

随机推荐

  1. LINQ入门教程之各种标准查询操作符(二)

    续上篇LINQ入门教程之各种标准查询操作符(一) LINQ入门教程之各种标准查询操作符(二) 7.  聚合操作符 8.  集合操作符 9.  生成操作符 #region 生成操作符 即从现有序列的值中 ...

  2. 利用setTimeout来实现setInterval

    在Js中,当我们要在一定间隔时间内不断执行同一函数,我们可以使用setInterval函数,但setInterval在某些情况下使用时也存在一定问题. 1.不去关心回调函数是否还在运行 在某些情况下, ...

  3. js动画实现(一)

    requestAnimationFrame是什么? 在浏览器动画程序中,我们通常使用一个定时器来循环每隔几毫秒移动目标物体一次,来让它动起来.如今有一个好消息,浏览器开发商们决定:“嗨,为什么我们不在 ...

  4. To B服务想做移动化?腾讯云案例了解一下

    本文由 腾讯云助手团队 发布于 腾讯云云+社区 | 导语:腾讯云那么多资源和服务,就不能手机管理吗? 能. 当用户在使用To B服务时,往往会遇到各种各样的限制: 1.操作难度:涉及各种权限.多重验证 ...

  5. mysql存储之int

    开始之前给大家出个问题,数据库表test中两个字段  a int(2),b int(3),现在想执行下面的插入语句 ,) 思考是否可以插入? 答案是能插入 再看下面的语句 ,) 思考能不能插入?注意第 ...

  6. Linux笔记-Linux命令初解2

    在看linux过程中,文件属性管理是一个难点,因而作为初学者的我来说,我直接将其放在后面来慢慢研究,因而我个人觉得先学习后面一些知识点之后,回过头来将一些你所不懂的去解透,这是极好的意见事情.对了,我 ...

  7. 开源代码SlidingMenu的使用

    1. 将SlidingMenu导入Android studio3.0 2. 编写代码 left_menu.xml <?xml version="1.0" encoding=& ...

  8. c#删除list中的元素

    public static void TestRemove() { string[] str = { "1", "2", "d", &quo ...

  9. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  10. Spring学习(二)--- Bean 作用域

    概述 本文介绍的Spring 中bean的作用域. 问题 : bean的作用域有几种,有那些应用场景 bean 装配过程 下图为bean在容器中从创建到销毁的若干阶段. bean 作用域 作用域介绍 ...