让PowerShell Web Access只支持某条命令

基于Web方式使用浏览器进行PowerShell远程管理 2


PowerShell Web Access 介绍

大家好,今天由瑞克带领大家讨论怎样使用Windows Server 2012上面的新功能:PowerShell Web Access (PSWA)在你的IT基础环境中远程管理一组服务器。此外,你还可以细粒度地根据你的IT环境中不同层次的支持团队委派他们使用固定的有限的PowerShell命令。 PowerShell Web Access 让Windows server 2012的远程管理如虎添翼。它扮演着一个代理网关的角色,提供完整的或者有限的PowerShell会话来访问你的远程服务器。

荔非苔注:为什么需要PSWA?PowerShell控制台本身不就支持远程会话吗?是的,但是我能在xp系统上,windows phone 上,安卓手机上访问远程机器吗?不能。所以此时我需要找一个代理,一台代理服务器,在它上面部署一个web网站,让它帮我进行远程访问。而在windows server 2012 和Windows server 2012 R2上,不需要我开发这个网站了,PSWA已经帮我做好了,我只须简单的启用和配置即可。

基于Web方式使用浏览器进行PowerShell远程管理

基于Web方式使用浏览器进行PowerShell远程管理

即使PowerShell的Tab键的自动完成功能,PSWA也是支持的,应当没有人愿意在它的手机上输入一条完整的PowerShell命令。如果使用手机能让你远离办公桌,并完成一些简单的任务,何乐而不为呢?另外,随着键盘功能有所增强的平板电脑的普及,我想你会更欣赏PSWA这个功能的 :)。

PowerShell Web Access 安装

安装组件

接下来,让我们以安装PSWA功能的命令 Install-WindowsFeature 来开始吧:

 Install-WindowsFeature WindowsPowerShellWebAccess –IncludeManagementTools
使用PowerShell安装pswa

使用PowerShell安装pswa

安装网站

接下来,我们会在IIS中安装一个Web应用程序和一些PSWA所需的IIS组件:

Install-PswaWebApplication –WebApplicationName “pswagateway” –UseTestCertificate
在IIS中安装PSWA应用程序

在IIS中安装PSWA应用程序

这里稍微注意下,出于安全,PSWA默认使用HTTPS把数据从你的客户端传递到代理服务器。上面的例子中,我们使用了内置的“Test Certificates”功能。它会在你的IIS中创建一个自签名证书,这一般不会用于生产环境中(荔非苔注:不像有关部门,有钱包二奶,没钱搞证书,买个火车票,浏览器出现的还是红叉叉,坑爹)。当然,你还可以参考Technet上关于如何给PSWA网关设置外部的CA和内部PKI证书的SSL证书的文章。

默认情况下,PSWA使用IIS中的‘Default Web Site’ :

PSWA使用默认站点
PSWA使用默认站点

PowerShell Web Access 配置

添加授权规则

PowerShell Web Access现在已经安装完毕,你可以通过浏览器来访问。我们会输入网关的URL和上面使用的Web应用程序的名字。你会看到一个警告信息,说该网站使用的证书不是受信任的CA机构颁发,这是因为我们使用的是测试证书。选择继续,你会看到一个基于Form的登陆页面。

PowerShell Web Access登陆界面

PowerShell Web Access登陆界面

在用户能够登陆进PSWA网站之前,我们必须添加一些授权规则。PSWA提供了4层安全级别。

  • 基于证书的IIS 安全
  • Form验证
  • 授权规则(定义指定的一些列用户,访问指定的一系列目标机器)
  • 目标机器授权/会话配置。只可以允许特定的用户去访问一些特定的模块,命令,别名等的子集。比如你可以为PowerShell Web Access配置一个受限的运行空间,或者会话配置。你可以限制你的用户只能使用PowerShell 活动目录的组件,或者不能访问FailoverClusters 组件。

下面的例子中我们会演示授予用户组’Domain Admins’ 访问‘Domain Controllers’下机器所有的PowerShell组件。(这篇文章中的所有命令只是一个演示,请您自行包装)。

Add-PswaAuthroizationRule –UserGroupName ‘port389\domain admins’ –ComputerGroupName ‘port389\domain controllers’ –ConfigurationName Microsoft.powershell
PowerShell Web Access 添加授权规则

PowerShell Web Access 添加授权规则

注意:这个例子中我的域名称是“port389”。所以当我使用“port389”指定域时,不是指的端口号。另外再次强调一遍PSWA默认使用的是IIS中的‘Default Web Site’站点。

configuration 名称指的是会话信息保存在哪里。一个“会话配置”也称之为“endpoint”,它是在PSWA这台机器上的设置集合,定义了连接到终端机器的Windows PowerShell会话(PSSessions)环境。所有的PSSessions都会使用一个会话配置。要指定一个特定的会话配置,可以使用ConfigurationName 参数,它暴露了一个预配置的会话。也定义了从PowerShell访问的级别。上面的例子中,我们使用了一个内置的Microsoft.powershell ,它给予了完全访问所有PowerShell命令,组件和提供程序的权限。运行Help Get-PSSessionConfiguration 命令学习更多信息,可以参加在线帮助文档,我更喜欢后者。

接下来我们选择测试环境中的‘DC1’然后键入一个域管理员的用户名和ID,就可以登陆了。

PowerShell Web Access登陆

PowerShell Web Access登陆

PowerShell Web Access 登陆成功

PowerShell Web Access 登陆成功

检测目标机器是否开始远程访问

从上面的界面可以看到我们已经可以访问远程访问DC1上的PowerShell了。注意啦,你要远程连接的目标机器必须开启了远程访问。我这边所有加入域的Windows Server 2012服务器都启用了远程访问。你也可以做个快速检查,在PSWA外面,通过一个常规的PowerShell窗口来使用Enter-PSSesion 。

Enter-PSSession –ComputerName Storage1 –Credential $cred
PowerShell Web Access验证目标主机开启远程连接

PowerShell Web Access验证目标主机开启远程连接

如果需要启用,使用Enable-PSremoting 命令,也可以参考TenchEd上面关于PowerShell 3.0远程管理的视频教程

添加会话配置文件

现在我们给用户‘Mark’ 创建一个会话配置文件,让它能够访问Storage 组件,取名为Storage1。我们会使用命令New-PSSessionConfigurationFile。注意*PSSessionConfiguration*这类命令是基于Windows PowerShell 3.0,而powerShell 3.0又是Window 管理框架3.0的一部分。对于一些非windows 8和Windows Server 2012的旧版本操作系统,比如Windows 7和Windows Server 2008,可以从这里下载。

登陆到storage服务器上(Storage1),执行下面的命令:

New-PSSessionConfigurationFile -ModulesToImport Storage -LanguageMode NoLanguage -SessionType RestrictedRemoteServer -Path StorageOnly.pssc

通过上面的命令,我们导入了storage组件,定义会话类型为限制远程机器和文件名和存储会话配置文件的路径,后缀名为.pssc

注册会话配置文件

接下来我们必须注册这个会话配置文件(此操作仍然是目标机器-Storage1),它会被来路远程会话调用。在下面的语法中,我们会取个配置名称为StorageOnly,然后使用RunAs参数指定被远端目标机器(Storage1)调用建立会话时,所使用的管理员用户凭据。语法中也包括了–ShowSecurityDescriptorUI ,这种方式方便更新ACL,允许Mark读取和执行会话配置文件(看下面的第二张截图)。最后,我们指定了同样的文件名和路径,并制定扩展名为.pssc 的文件,这个文件是由上一条命令创建的。

 Register-PSSessionConfiguration -Name StorageOnly -RunAsCredential port389\administrator -ShowSecurityDescriptorUI -Path .\StorageOnly.pssc
Powershell Web Access 添加会话配置文件

Powershell Web Access 添加会话配置文件

Powershell Web Access 注册会话配置文件

Powershell Web Access 注册会话配置文件

注意警告信息,使用了“RunAs”后,该endpoint会运行在提升的权限下。所以,我们需要限制会话的作用域。有两种方式,第一种,‘Mark’ 只被允许使用Storage的PowerShell组建下的命令(可以看上面的 New-PSSessionConfigurationFile 语法);第二种,‘Mark’ 只能读取和运行PowerShell会话配置文件(看上面的截图)。他不能更新这个配置文件,来给自己添加额外的权限。(荔非苔注:就像有的人自己给自己升官,自己给自己颁发神马联合国奖状一样),要卸载已经注册过的配置文件,可以使用Unregister-PSSessionConfiguration 命令。

接下来,我们回到PSWA服务器上,定义一条授权规则给Mark,然后远程连接到Storage1这台机器上,并执行StorageOnly 会话。

Add-PswaAuthorizationRule -UserName port389\mark -ComputerName Storage1 -ConfigurationName StorageOnly
PowerShell Web Access 根据会话配置文件添加授权规则

PowerShell Web Access 根据会话配置文件添加授权规则

注意:上面的语法中,我们必须使用在服务器(Storage1)上提前定义,保存,和注册的相同的会话配置文件名称(StorageOnly) 。

指定会话配置来连接PowerShell Web Access

接下来,测试一下我们的配置,打开PSWA网页,提供Mark的用户名和密码,然后展开‘可选链接设置’。在可选链接设置中,必须提供会话配置的名称(StorageOnly)。

使用自定义会话配置登陆PowerShell Web Access

使用自定义会话配置登陆PowerShell Web Access

登陆后,用户Mark只能访问Storage服务器上的Storage组件下的命令了,其它命令不可用,也不可见。

限制PowerShell Web Access的支持的命令

限制PowerShell Web Access的支持的命令

你还可以登陆到PSWA机器上通过运行Get-PswaAuthorizationRule 查看激活的授权规则,使用 Remove-PswaAuthorizationRule 命令删除一条规则。我说过的,PowerShell是很直观的:)

PowerShell Web Access 查看激活的授权规则

PowerShell Web Access 查看激活的授权规则

还有一种很好方式限制你的管理员通过PSWA基础设施可以运行的命令。还记得我们上面在 (Storage1)创建和配置PSSessionConfiguration时吗?其实New-PSSessionConfigurationFile这条命令还有一个选项 –VisibleCmdlets 。该选项可以将少量命令(支持通配符)暴露给远程连接的用户。比如下面的截图就是我针对DC服务器只把Get-ADUser 命令加进来后的效果了,而不是整个活动目录的命令。要看当前机器支持的远程命令,可以在远程会话上运行:

Get-Command
让PowerShell Web Access只支持某条命令

让PowerShell Web Access只支持某条命令

另外我得说明啦,会话配置文件并不是PSWA的专有的,它最开始是用在PowerShell其它远程机制中的。比如 Enter-PSSession。当然你可能也注意到了,出于方便有几条命令会在你定义会话类型限制时,就被自动加入到会话中,比如Exit-PSSession and Get-Help 。

PSWA会话默认会在15分钟后失效和超时,但是你参考“IIS管理站点设置”可以更改这个会话过期的时间。

PowerShell Web Access 会话超时

PowerShell Web Access 会话超时

PSWA需要什么基础环境?

  • 网关服务器必须运行windows Server 2012 + 。
  • 目标机器运行Windows 7,2k8,2k8 R2和PowerShell 2.0+,并且WinRM2.0得启用。
  • 目标机器运行在Windows 8+,或者Windows Server 2012 ,WinRM启用。
  • 访问PSWA站点,需要任意支持HTML,Java,Cookies的浏览器即可。

再给你送个福利,PowerShell 3.0引入了许多非常棒命令,尤其针对Windwos基础环境的管理。你可能会喜欢一条命令Show-Command ,因为它缩短了你学习PowerShell的曲线。Show-Command 会代开一个对话框,让你在图形界面输入参数。挺有用,帮助你构造合适的命令参数语法。完了后,你可以直接执行它,也可以把它复制到剪贴板。

构造PowerShell参数语法

构造PowerShell参数语法

结论

PowerShell Web Access 结合*PSSessionConfiguration * 命令给你在IT基础环境中的分层式远程管理和委派权限提供了非常大的方便。你可以利用PowerShell 3.0和WinRM的通过网关集中访问一组目标服务器。使用Web客户端进行访问非常方便,并能通过合适的权限委托确保安全。

原文作者:Rick
原文连接Want Remote PowerShell Management from your browser?
翻译:荔非苔

本文链接: https://www.pstips.net/powershell-remote-management-from-browser-against-web.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

2 条评论 “基于Web方式使用浏览器进行PowerShell远程管理