大家好,今天由瑞克带领大家讨论怎样使用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已经帮我做好了,我只须简单的启用和配置即可。
即使PowerShell的Tab键的自动完成功能,PSWA也是支持的,应当没有人愿意在它的手机上输入一条完整的PowerShell命令。如果使用手机能让你远离办公桌,并完成一些简单的任务,何乐而不为呢?另外,随着键盘功能有所增强的平板电脑的普及,我想你会更欣赏PSWA这个功能的 :)。
接下来,让我们以安装PSWA功能的命令 Install-WindowsFeature 来开始吧:
1 | Install-WindowsFeature WindowsPowerShellWebAccess –IncludeManagementTools |
接下来,我们会在IIS中安装一个Web应用程序和一些PSWA所需的IIS组件:
1 | Install-PswaWebApplication –WebApplicationName “pswagateway” –UseTestCertificate |
这里稍微注意下,出于安全,PSWA默认使用HTTPS把数据从你的客户端传递到代理服务器。上面的例子中,我们使用了内置的“Test Certificates”功能。它会在你的IIS中创建一个自签名证书,这一般不会用于生产环境中(荔非苔注:不像有关部门,有钱包二奶,没钱搞证书,买个火车票,浏览器出现的还是红叉叉,坑爹)。当然,你还可以参考Technet上关于如何给PSWA网关设置外部的CA和内部PKI证书的SSL证书的文章。
默认情况下,PSWA使用IIS中的‘Default Web Site’ :
PowerShell Web Access现在已经安装完毕,你可以通过浏览器来访问。我们会输入网关的URL和上面使用的Web应用程序的名字。你会看到一个警告信息,说该网站使用的证书不是受信任的CA机构颁发,这是因为我们使用的是测试证书。选择继续,你会看到一个基于Form的登陆页面。
在用户能够登陆进PSWA网站之前,我们必须添加一些授权规则。PSWA提供了4层安全级别。
下面的例子中我们会演示授予用户组’Domain Admins’ 访问‘Domain Controllers’下机器所有的PowerShell组件。(这篇文章中的所有命令只是一个演示,请您自行包装)。
1 | Add-PswaAuthroizationRule –UserGroupName ‘port389\domain admins’ –ComputerGroupName ‘port389\domain controllers’ –ConfigurationName Microsoft.powershell |
注意:这个例子中我的域名称是“port389”。所以当我使用“port389”指定域时,不是指的端口号。另外再次强调一遍PSWA默认使用的是IIS中的‘Default Web Site’站点。
configuration 名称指的是会话信息保存在哪里。一个“会话配置”也称之为“endpoint”,它是在PSWA这台机器上的设置集合,定义了连接到终端机器的Windows PowerShell会话(PSSessions)环境。所有的PSSessions都会使用一个会话配置。要指定一个特定的会话配置,可以使用ConfigurationName 参数,它暴露了一个预配置的会话。也定义了从PowerShell访问的级别。上面的例子中,我们使用了一个内置的Microsoft.powershell ,它给予了完全访问所有PowerShell命令,组件和提供程序的权限。运行Help Get-PSSessionConfiguration 命令学习更多信息,可以参加在线帮助文档,我更喜欢后者。
接下来我们选择测试环境中的‘DC1’然后键入一个域管理员的用户名和ID,就可以登陆了。
从上面的界面可以看到我们已经可以访问远程访问DC1上的PowerShell了。注意啦,你要远程连接的目标机器必须开启了远程访问。我这边所有加入域的Windows Server 2012服务器都启用了远程访问。你也可以做个快速检查,在PSWA外面,通过一个常规的PowerShell窗口来使用Enter-PSSesion 。
1 | Enter-PSSession –ComputerName Storage1 –Credential $cred |
如果需要启用,使用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),执行下面的命令:
1 | New-PSSessionConfigurationFile -ModulesToImport Storage -LanguageMode NoLanguage -SessionType RestrictedRemoteServer -Path StorageOnly.pssc |
通过上面的命令,我们导入了storage组件,定义会话类型为限制远程机器和文件名和存储会话配置文件的路径,后缀名为.pssc
接下来我们必须注册这个会话配置文件(此操作仍然是目标机器-Storage1),它会被来路远程会话调用。在下面的语法中,我们会取个配置名称为StorageOnly,然后使用RunAs参数指定被远端目标机器(Storage1)调用建立会话时,所使用的管理员用户凭据。语法中也包括了–ShowSecurityDescriptorUI ,这种方式方便更新ACL,允许Mark读取和执行会话配置文件(看下面的第二张截图)。最后,我们指定了同样的文件名和路径,并制定扩展名为.pssc 的文件,这个文件是由上一条命令创建的。
1 | Register-PSSessionConfiguration -Name StorageOnly -RunAsCredential port389\administrator -ShowSecurityDescriptorUI -Path .\StorageOnly.pssc |
注意警告信息,使用了“RunAs”后,该endpoint会运行在提升的权限下。所以,我们需要限制会话的作用域。有两种方式,第一种,‘Mark’ 只被允许使用Storage的PowerShell组建下的命令(可以看上面的 New-PSSessionConfigurationFile 语法);第二种,‘Mark’ 只能读取和运行PowerShell会话配置文件(看上面的截图)。他不能更新这个配置文件,来给自己添加额外的权限。(荔非苔注:就像有的人自己给自己升官,自己给自己颁发神马联合国奖状一样),要卸载已经注册过的配置文件,可以使用Unregister-PSSessionConfiguration 命令。
接下来,我们回到PSWA服务器上,定义一条授权规则给Mark,然后远程连接到Storage1这台机器上,并执行StorageOnly 会话。
1 | Add-PswaAuthorizationRule -UserName port389\mark -ComputerName Storage1 -ConfigurationName StorageOnly |
注意:上面的语法中,我们必须使用在服务器(Storage1)上提前定义,保存,和注册的相同的会话配置文件名称(StorageOnly) 。
接下来,测试一下我们的配置,打开PSWA网页,提供Mark的用户名和密码,然后展开‘可选链接设置’。在可选链接设置中,必须提供会话配置的名称(StorageOnly)。
登陆后,用户Mark只能访问Storage服务器上的Storage组件下的命令了,其它命令不可用,也不可见。
你还可以登陆到PSWA机器上通过运行Get-PswaAuthorizationRule 查看激活的授权规则,使用 Remove-PswaAuthorizationRule 命令删除一条规则。我说过的,PowerShell是很直观的:)
还有一种很好方式限制你的管理员通过PSWA基础设施可以运行的命令。还记得我们上面在 (Storage1)创建和配置PSSessionConfiguration时吗?其实New-PSSessionConfigurationFile这条命令还有一个选项 –VisibleCmdlets 。该选项可以将少量命令(支持通配符)暴露给远程连接的用户。比如下面的截图就是我针对DC服务器只把Get-ADUser 命令加进来后的效果了,而不是整个活动目录的命令。要看当前机器支持的远程命令,可以在远程会话上运行:
1 | Get-Command |
另外我得说明啦,会话配置文件并不是PSWA的专有的,它最开始是用在PowerShell其它远程机制中的。比如 Enter-PSSession。当然你可能也注意到了,出于方便有几条命令会在你定义会话类型限制时,就被自动加入到会话中,比如Exit-PSSession and Get-Help 。
PSWA会话默认会在15分钟后失效和超时,但是你参考“IIS管理站点设置”可以更改这个会话过期的时间。
再给你送个福利,PowerShell 3.0引入了许多非常棒命令,尤其针对Windwos基础环境的管理。你可能会喜欢一条命令Show-Command ,因为它缩短了你学习PowerShell的曲线。Show-Command 会代开一个对话框,让你在图形界面输入参数。挺有用,帮助你构造合适的命令参数语法。完了后,你可以直接执行它,也可以把它复制到剪贴板。
PowerShell Web Access 结合*PSSessionConfiguration * 命令给你在IT基础环境中的分层式远程管理和委派权限提供了非常大的方便。你可以利用PowerShell 3.0和WinRM的通过网关集中访问一组目标服务器。使用Web客户端进行访问非常方便,并能通过合适的权限委托确保安全。
原文作者:Rick
原文连接:Want Remote PowerShell Management from your browser?
翻译:荔非苔