PowerShell连接远程主机运行远程命令
PowerShell主要采用Web Services for Mangement(WS-MAN)进行远程处理,WS-MAN完全基于Http(默认5985)或者Https(默认5986)进行工作,这样保证在需要的情况下,能够轻易透过防火墙进行作业(因为每种协议都使用唯一的端口进行通信)。微软对WS-MAN的实现是Windows Remote mangement(WinRM)。WinRM是一个基于SOAP的后台服务。
PowerShell连接常规远程主机
1. 在远程机器上以Administrator角色打开PowerShell执行以下命令,启动允许远程连接
Enable-PsRemoting
2. 在客户机器 (本地) 执行以下命令,将远程机器IP地址加入可信主机列表
Set-Item wsman:\localhost\Client\TrustedHosts -value <Remote Host IP Address>
3. 在客户机器 (本地) 输入以下命令, 在弹出对话框输入密码,以交互的方式连接远程主机
Enter-PSSession -ComputerName <Remote Host IP Address> -Credential <UserName>
4. PowerShell远程命令的基本使用见官方文档: Running Remote Commands
- Start an Interactive Session (Enter-PSSession and Exit-PSSession)
- Run a Remote Command / Script (Invoke-Command)
- Establish a Persistent Connection (New-PSSession)
使用PowerShell以Http方式连接Azure虚拟机
1. 同以上常规连接远程主机设置
1. 若虚拟机安全受网络完全组(Network Security Group)管控,设置允许5985入栈
2. 若虚拟机绑定了负载均衡器(load balancer),为5985端口设置入站NAT规则(Inbound NAT Rules), 或者为了隐藏实际端口,为5985端口运行状况探测(probes)和负载均衡规则(load Balancing Rules)
使用PowerShell以Https方式连接Azure虚拟机
1. 同以上常规连接远程主机设置
2. 打开Azure远程虚拟机(Windows)防火墙设置,设置允许5986入栈
3. 若虚拟机安全受网络完全组(Network Security Group)管控,设置允许5986入栈
4. 若虚拟机绑定了负载均衡器(load balancer),为5986端口设置入站NAT规则(Inbound NAT Rules),或者为了隐藏实际端口,为5986端口运行状况探测(probes)和负载均衡规则(load Balancing Rules)
5. 需使用以下命令连接远程主机, 详细参数设置见: Enter-PSSession
# 设置会话,忽略远程机器的SSL证书验证
$SessionOption = New-PsSessionOption SkipCACheck -SkipCNCheck
Enter-PSSession -ConnectionUri https://<Remote Host IP Address>:5986 -Credential <User Name> -SessionOption $SessionOption
# 另一种参数形式
Enter-PSSession -ComputerName <Remote Host IP Address> -Port 5986 -UseSSL -Credential <User Name> -SessionOption $SessionOption
从PowerShell 6开始,除了WS-MAN之外,远程处理技术还可以基于SSH协议。在最新的Windows 10和Windows Server 2019中,可以使用OpenSSH连接远程机器,详细文档参见:PowerShell remoting over SSH and OpenSSH in Windows, 另外,OpenSSH客户端在最新的Windows 10和Windows Server 2019中已默认安装,在 设置\应用\可选功能 列表下可以找到(见下图), 可以通过上方的添加功能按钮安装OpenSSH服务器。
更多参考:
1. Enable PowerShell remoting on Azure RM virtual machines
2. Copy files to Azure VM using PowerShell Remoting
3. Secrets of PowerShell Remoting
3. 远程管理WinRM,Enter-PSSession (Enable-PSRemoting = Set-WSManQuickConfig = winrm quickconfig)