本文目录
远程创建和管理Windows Azure 上面的虚拟机可以使用Windows Azure SDK,包括Rest API版, .NET版,PowerShell版。但是如果要使用PowerShell远程管理Windows Azure 上面虚拟机的内部对象,例如文件,进程,服务,注册表等,可以借助WinRM服务。
创建虚拟机
创建虚拟机时,默认会打开网关防火墙上PowerShell远程管理的私有端口5986和公有端口5986,你可以出于安全考虑将公有端口改成自己的端口(我暂时改成了65331)
在Azure 门户上配置虚拟机
假如你创建时没有配置或者不小心删除了,在虚拟机创建后,也可以在Azure门户上来配置。
服务器端的配置
开启WinRM服务
通过远程桌面连接到服务器(Azure VM)上面,以管理员权限打开PowerShell控制台,运行下面命令:
PS I:\> Enable-PSRemoting WinRM 快速配置 正在运行命令“Set-WSManQuickConfig”,以便通过 Windows 远程管理(WinRM)服务对该计算机进行远程管理。 其中包括: 1. 启动或重新启动(如果已启动) WinRM 服务 2. 将 WinRM 服务启动类型设置为“自动” 3. 创建侦听程序以接受任意 IP 地址上的请求 4. 为 WS-Management 通信启用 Windows 防火墙入站规则例外(仅适用于 http)。 是否继续? [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y WinRM 已更新为接收请求。 成功更改 WinRM 服务类型。 已启动 WinRM 服务。 WinRM 已经进行了更新,以用于远程管理。 在 HTTP://* 上创建 WinRM 侦听程序接受 WS-Man 对此机器上任意 IP 的请求。 WinRM 防火墙异常已启用。 已配置 LocalAccountTokenFilterPolicy 以远程向本地用户授予管理权限。 确认 是否确实要执行此操作? 正在目标“名称: microsoft.powershell SDDL: O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)。这允许选定的用户在此计算机上远程运行 Windows PowerShell 命令。”上执行操作“Set-PSSessionConfiguration”。 [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y 确认 是否确实要执行此操作? 正在目标“名称: microsoft.powershell.workflow SDDL: O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)。这允许选定的用户在此计算机上远程运行 Windows PowerShell 命令。”上执行操作“Set-PSSessionConfiguration”。 [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y 确认 是否确实要执行此操作? 正在目标“名称: microsoft.powershell32 SDDL: O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)。这允许选定的用户在此计算机上远程运行 Windows PowerShell 命令。”上执行操作“Set-PSSessionConfiguration”。 [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y
配置WinRM使用HTTPS连接
Azure上面的机器位于公网Cloud上面,一般不会加入域,PowerShell远程跨域访问为了安全须要使用HTTPS连接,在服务器上配置让RinRM服务只允许使用HTTPS连接。
winrm quickconfig -transport:https
客户端的配置
先使用下面的命令从客户端建立起一个会话:
New-PSSession -ComputerName pstips.cloudapp.net -Port 65331 -UseSSL -Credential (Get-Credential)
可能会碰到下面的错误:
New-PSSession : [pstips.cloudapp.net] 连接到远程服务器 pstips.cloudapp.net 失败,并显示以下错误消息: 目标计算机(pstips.cloudapp.net:65331)上的服务器证书包含以下错误: SSL 证书由未知的证书颁发机构签名。 有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
导入证书
上面的错误非常详细,Cloud上面的机器使用的是自签名证书,须要将该证书导入你客户端的证书存储区:证书->当前用户->受信任的根证书颁发机构。
获取自签名证书
问题来了,如何获取这个自签名证书呢?方法可能很多,我选择用浏览器,使用谷歌浏览器chrome,访问:
https://pstips.cloudapp.net:65331
然后显示该”网站的证书不受信任“,单击地址栏的https锁,弹出证书信息。选择连接选项卡,单击证书信息,弹出“证书信息”对话框,选择“详细信息”选项卡,单击“复制到文件”按钮,将证书保存至本地文件。然后导入证书至受信任的根证书颁发机构,即可。
完了以后再使用PowerShell尝试建立远程会话,然后执行命令。
PS> New-PSSession -ComputerName pstips.cloudapp.net -Port 65331 -UseSSL -Credential (Get-Credential) 位于命令管道位置 1 的 cmdlet Get-Credential 请为以下参数提供值: Credential Id Name ComputerName State ConfigurationName Availability -- ---- ------------ ----- ----------------- ------------ 2 Session2 pstips......... Opened Microsoft.PowerShell Available PS> $session = Get-PSSession -Id 2 PS> Invoke-Command -Session $session -ScriptBlock { Get-Service spooler} Status Name DisplayName PSComputerName ------ ---- ----------- -------------- Running spooler Print Spooler pstips.cloudapp.net
恭喜,此服务器已被占领。
本文链接: https://www.pstips.net/remote-manage-vm-hosted-on-windows-azure.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
您好!这个网站对我很有帮助,非常感谢。有个实践中遇到问题请教。
最近按照这篇文章提示配置PowerShell 远程管理Windows Azure,执行到“配置WinRM使用HTTPS连接”中的“winrm quickconfig -transport:https”遇到问题,反馈信息如下:
应该是Azure VM上的证书不匹配所致。
其后用winrm e winrm/config/listener查看,返回:
Azure网关中这台VM已经有***.cloudapp.net的dns name,hostname显示为***,
我现在疑惑的是WinRM中https证书所需CN对应的hostname究竟对应Azure网关的dns name还是hostname,
还是“ winrm e winrm/config/listener”查看返回 Hostname下的空内容?
补充一下问题,在VM的PS中敲hostname,显示是***,同Azure网关对应VM的hostname一致。
又用MMC查看了一下VM上本地计算机安装的证书,个人证书目录下有***.cloudapp.net证书,可显示不被信任,
将其挪到根目录证书下,状态改为信任,可是“winrm quickconfig -transport:https”仍然报错。
请问是否该自行创建hostname证书,比如pstips.cloudapp.net的dns name,就得另外创建一个pstips证书?
@zhgj007
非常感谢您详细的反馈信息,我单独写了篇文章介绍这个问题:
PowerShell 配置winrm使用HTTPS
广播: PowerShell 配置winrm使用HTTPS | PowerShell 中文博客
Get-Credential 的信息有没有办法保存,避免每次都要输入
找到种默认参数值的方法
$PSDefaultParameterValues = @{
“Enter-PSSession:Credential” = New-Object Management.Automation.PSCredential “username”, (ConvertTo-SecureString ‘password’ -AsPlainText -Force)
}
非常感谢,亲测有效!
广播: PowerShell 默认参数值 | PowerShell 中文博客