利用powershell进行远程服务器管理(命令行模式)
Pssession,Pssession是Windows Powershell会话的意思,一个会话,可以共享数据,提供交互式的对话,我们可以为某些命令例如Invoke-Command 制定会话来远程作业。当然我们还能利用Enter-Pssession来直接和远程计算机连接,直接建立一个持续安全的远程对话,来执行我们的所有命令。
我们分三个部分来讲述Powershell Session,首先是域环境下的远程连接,WAN/LAN的远程连接(Trusthost方式),WAN/LAN的远程连接(SSL加密方式),可以先大致的理解为,当我们操作的机器和远程机器处于同一个AD下,那么是可以直接向Powershell使用Kerbors(基于FQDN),NTLM基于ip地址来进行身份标识的传输,一般是通过当前登录到机器的用户凭据。当我们处于另外的网络环境,或者工作机没有入域能够提供域标识的情况下,可以使用信任主机和SSL加密方式来向远程机器提供会话标识的方式。
Powershell基于WinRM和WinRS来建立远程会话的,以及和传统的WMI DCOM的对比。WMI 依赖 DCOM 在远程计算机上执行管理任务,而防火墙往往会阻止所有传入的 DCOM 通信,这使 WMI 很难(如果并非完全不可能)通过 Internet 以编程方式管理计算机 Windows 远程管理(WinRM)是“WS 管理协议的 Microsoft 实施,该协议是基于标准 SOAP、不受防火墙影响的协议,允许不同供应商的硬件和操作系统相互操作。也就是我们在Client使用本地的WinRS(Windows Remote Shell) 向远程的WinRM(Windows Remote Service)基于SOAP 通过http或者https进行连接获取管理数据(底层依旧使用WMI,但是已经被包装了SOAP来通讯了)。必须注意的是:客户端和服务端都必须安装启用WinRM
Solution One:
Client:非域环境 Domain:vm.terry-corp.com(也可以是工作组,我这里用的是域)
客户端打开Powershell 执行 cd wsman::localhost\client 输入ls
PS Microsoft.WSMan.Management\WSMan::localhost\Client> ls
(默认TrustedHosts 为空,当我们在非信任环境下(不能使用Kerbors认证) 的时候,必须使用TrustedHosts或者SSL方式)
##Set-Item TrustedHosts “你的入域机器的IP或者工作组机器”
我这里执行的是:
Set-Item TrustedHosts “192.168.133.67”
查看 ls
Name Value
---- -----
NetworkDelayms 5000
URLPrefix wsman
AllowUnencrypted false
Auth
DefaultPorts
TrustedHosts 192.168.133.67
修改成功!
服务端
首先启用远程访问Enable-PSRemoting –Force
操作会打开WinRM服务,添加WinRM 的防火墙例外,可以在WF.MSC自己再次确认Windows Remote Management的防火墙是否对你的Client有了例外
客户端打开Powershell
Enter-PSSession -ComputerName 192.168.133.67 –Credential vm.terry-corp.com\Administrator
(可以设置自己的凭据,我这里用的域帐号)
成功的话会显示:
[192.168.133.67]: PS C:\Users\Administrator\Documents>
记得退出Exit-Pssession
Solution Two:
WS-Management 加密通过网络传输的所有 Windows PowerShell 内容。UseSSL 是一种额外的保护措施,它通过 HTTPS 连接而不是 HTTP 连接来发送数据。
因此使用SSL方式是一种更加安全可靠的远程管理方式.
SSL的工作原理也是确认客户端和服务端的身份之后再进行握手的,还担保了数据的来源,不被纂改和监听.
首先要生成SSL证书
(题外话:我本来打算使用AD 证书服务来给自己颁发一个机器名的证书,但是我入域机器的机器名是带上了dns后缀名的, 而我的客户端连接使用的是IP地址,那么会被认为证书的CN名和机器名不一致.AD 机器很多时候都是内网环境,所以想直接通过AD证书,那么你的DNS必须在客户端能够被解析.所以我这里使用的是自签名的证书)
可以使用sslself.exe或者makecert.exe
下载SelfSSL http://www.microsoft.com/downloads/...laylang=en
makecert.exe在.NET Framework 工具中有
服务端生成证书
SELFSSL:
C:\Program Files (x86)\IIS Resources\SelfSSL>selfssl.exe /N:CN=192.168.133.67 /V:3600 /T /Q
(ip就是服务端的ip)
MAKECERT:
MakeCert.exe -pe -n "CN=192.168.133.67" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange –r C:\1.CER
(在C盘根目录下的1.cer)
打开inetmgr 移除默认站点对SSL 443的binding
打开MMC (文件->添加删除 管理单元)找到 证书 选择 本地计算机添加 找到根信任区域
导出刚才的证书
Copy 到客户端,导入证书到根信任区域
再次返回到服务端
打开MMC 找到刚才的证书,复制证书 详细信息里面的 指纹
eb 10 24 5d 89 11 4a 57 4c 0c ba ac 79 b7 3b 3a 05 aa 1b d7
执行CMD
C:\Users\Administrator> winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="192.168.133.67";CertificateThumbprint=" eb 10 24 5d 89 11 4a 57 4c 0c ba ac 79 b7 3b 3a 05 aa 1b d7"}
添加对https 的监听,以及添加证书指纹.
成功显示:
ResourceCreated
Address = http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
ReferenceParameters
ResourceURI = http://schemas.microsoft.com/wbem/wsman/1/config/listener
SelectorSet
Selector: Address = *, Transport = HTTPS
执行Winrm enumerate winrm/config/listener 也可以确认添加是否成功显示:
Listener
Address = *
Transport = HTTPS
Port = 5986
Hostname = 192.168.133.67
Enabled = true
URLPrefix = wsman
CertificateThumbprint = eb 10 24 5d 89 11 4a 57 4c 0c ba ac 79 b7 3b 3a 05 aa 1b d7
ListeningOn = 127.0.0.1, 192.168.28.128, 192.168.133.67, ::1, fe80::5efe:192.168.28.128%13, fe80::5efe:192.168.133.6
7%12, fe80::856d:7551:c80d:b615%11, fe80::c576:2df6:6d25:6da6%10
说明已经正确添加了SSL证书.再次返回到客户端进行连接:
Powershell
Enter-PSSession -ComputerName 192.168.133.67 –Credential vm.terry-corp.com\Administrator –UseSSL
成功显示:
[192.168.133.67]: PS C:\Users\Administrator\Documents>
至此Windows Powershell 的两种方式已经和大家说清楚了,大家不明白的地方可以直接cnblogs联系我.下一篇文章详细讲述如何使用URI 连接远程的WinRM服务进行管理,这主要涉及到IIS 和SSL的配置