Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器

Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器

2018-07-01

Windows

约 2202 字
预计阅读 5 分钟

文章目录

在 Linux/Unix 世界里 SSH 是个好东西,SSH 是 Secure Shell 的缩写,用它可以很容易连接到指定的服务器,并执行特定命令行。除了支持远程终端,作为一种安全的通信协议,还为很多其他工具的提供安全通信功能(比如 Git)。

在本文里,SSH 主要指代的是基于 SSH 通信协议构建的安全终端连接。SSH 远程连接用起来非常简单,下面就是一个 ssh 的示例:

指定服务器地址,即可开启连接——简单到难以置信!然后,接下来的指令就是在目标机器上运行了。工作完成了,要断开连接?照常一个 exit 命令即可终止会话,就像关闭一个终端一样容易!

由于 SSH 本身是基于命令行环境的,所以如果要在一批远程服务器上执行任务也很容易,写一个 for 语句,很轻松就能完成:

于是,很多人发现,批量管理 Linux 服务器很轻松,即使没有那些功能大而全的工具,只要有管理(使用)单台服务器的经验,再加上 ssh 就可以轻松管理一个集群了。如果希望服务器能够通过远程管理,就需要在服务器上安装配置 openssh-server 了。这在 Linux 上基本也只是几个命令也就轻松搞定了。一切都是如此美好!

Windows 世界的远程管理

当类似的工作回到 Windows 上,人们首先想到的远程管理的方式是远程桌面连接,就是这个窗口:

远程桌面连接(RDP)也是一个神器,只要知道网络地址(机器名称),以及用户名和密码,就可以连接到任何一台 Windows 电脑上。连接建立之后,几乎就像在操作本地电脑一样地使用远程电脑。
在实践中我们发现,RDP 的表现相当不错。即使在网络不好的情况下,也能有良好的性能;远程操作的不光是桌面,还有剪贴板和音视频等丰富的资源。另外,RDP 的客户端也是很丰富,不但可以跨平台(包括 macOS、Linux 和手机平板电脑等),还有很多能同时连接多个电脑的工具。下面是在 Mac 上连接 Windows 服务器的效果:

RDP 相比于 SSH,提供了更强大的图形连接能力,本来是更强大的,但问题出在批量上。当我们要管理集群中的大量服务器的时候,远程桌面就无能为力了。当我们需要将一个操作,在多个服务器上操作的时候,RDP 无法提供自动重复的能力。本质上,这不是 RDP 的问题,它是图形界面的通病。

基于 WinRM 的 PowerShell Remoting

既然 Windows 上的图形界面无法提供批量的远程管理能力,那么命令行界面呢?
等一等,Windows 的命令行界面?Windows 有命令行界面吗?
大概不少人会有这样的疑问。答案不言自明,Windows 不光内置有命令行系统,而且很强大。只是大部分人不怎么用它而已。在早期,Windows 有命令提示符(cmd),后来 Windows 又添加了基于 .NET 的 PowerShell,大大强化了脚本化编程能力。

幸运的是,包括 PowerShell 的 Windows 的命令行体系提供了完善的远程连接和批量执行的能力。与 SSH 类似,PowerShell Remoting 也只需要知道服务器地址,就可以轻松连接;而要结束会话,也是一样的 exit 命令:

另外,PowerShell 中不少命令还专门为远程执行提供了优化,比如 Invoke-Command 等。下面的代码查询两台远程计算机的界面语言(代码引自文档):

1
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Get-UICulture }

输出结果为:

1
2
3
4
LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

PowerShell Remoting 是基于 Windows 内置的远程管理技术 WinRM 提供的。如果希望 Windows 服务器能够通过远程管理,需要在服务器启用 WinRM,并配置防火墙规则:

1
2
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

完成上述配置之后,客户端使用 PowerShell 就可以使用 Enter-PSSession 等命令连接到服务器上了。

配置无密码 的 PowerShell Remoting 体验

密码是一种简单直观,却不够安全的身份鉴别方法。说它不够安全,主要原因是对于集群中的大量服务器而言,如果要分别使用不同的密码,那么维护密码表就成为一项麻烦事了。但如果都用相同的密码,一旦密码泄漏,整个集群都陷入风险。所以不少人只好选一个折衷,为集群中的计算机使用统一密码的同时,又定时(比如每两个月)集中改一次密码。从而在便利和安全之间取得平衡。但始终,密码登录的方式是不够安全的。
在登录服务器时,SSH 支持使用密码,还支持使用证书公钥(public key)。证书公钥登录的原理是,管理员生成一对密钥,将公钥复制到服务器上,自己持有私钥并保护好私钥的内容。在需要连接服务器时,将在客户端用私钥与服务器进行一系列的登录验证后,开启安全的通信。由于公钥的公开并不会导致私钥(private key)的安全风险,所以这种登录方式并不会有泄漏风险。

PowerShell Remoting 的服务端 WinRM 支持两种无密码登录的方式。一种是使用客户端证书登录,身份验证过程与 SSH 很类似。另外它还支持借助 Active Directory 环境进行集中式登录。
要为 WinRM 开启客户端证书登录(Client Certificate),主要步骤有:
在服务端为 WinRM 启用 Client Certificate 登录功能
在服务端为 WinRM 启用 HTTPS 支持,设置防火墙规则
在客户端生成证书,并将证书的公钥(public key)导入到服务器上,并映射到指定的服务器上的用户
在客户端将证书导入本地计算机
使用证书连接到服务器
这些步骤并不复杂,却也没有像配置 SSH 服务端那么简单。所以我把这些脚本都写好了,请转到 GitHub 查看和下载。这里有一篇文章详细介绍了各步骤中要使用的命令。

除了基于 WinRM 的客户端证书登录,新版本的跨平台 PowerShell 6 还支持基于 OpenSSH 直接提供与 Linux 服务器上的 SSH 完全一致的体验。请转到官方文档了解具体配置方法,更多关于 PowerShell Remoting 的资料,还可以参考这本电子书

在服务器上启用了 WinRM 之后,不光可以支持 PowerShell Remoting 功能,还能为 Windows 服务器提供其他众多远程管理功能。比如,著名的自动化配置软件 Ansible 就可以使用 PowerShell Remoting 一样的方式来为 Windows 服务器提供自动化配置能力,同时也很好地支持了上面介绍的客户端证书登录。
事实证明,经过上述简单的配置,也可以很轻松地对 Windows 服务器进行批量的自动化管理了。

(全文完)



关注诺普博客公众账号,第一时间获得最新文章。

文章作者
陈计节

上次更新
2018-07-01

许可协议
文章作者保留所有权利,禁止转载。读者可不受限的阅读、分享链接。可在注明来源时引用本文片断,但引用的内容不应超过全文的 1/10 字数。

自动化

DevOps

PowerShell

原文地址:https://www.cnblogs.com/owenzh/p/11445287.html

时间: 2024-10-19 10:14:18

Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器的相关文章

在windows上通过ssh远程链接linux服务器[转]

本文分别转自 [http://jingyan.baidu.com/article/6d704a130de40e28db51cab5.html] [http://www.cnblogs.com/mliudong/p/4094519.html] 今天想要新装了一台linux服务器,想要将其搬到机房,同时也要实现通过别的电脑对该服务器的访问,通过windows上装的ssh访问linux服务器,发现链接不上,通过百度发现linux服务器上要装ssh-server,所以百度了安装教程(http://jin

使用Windows Azure PowerShell远程管理Windows Azure虚拟机

对于Windows Azure,如果你还在使用windowsazure.com门户来管理虚拟机,那就显得不怎么高上大了.Windows Azure PowerShell 是一个功能强大的脚本环境,可用于在 Windows Azure 中控制和自动执行工作负荷的部署和管理.   安  装   通过Microsoft Web Platform Installer一键搞定安装.   登录Azure账户   启动安装好的Windows Azure PowerShell,使用“Add-AzureAccou

[转帖]Ansible批量远程管理Windows主机(部署与配置)

2018-09-12 12:04:42 https://blog.51cto.com/7424593/2174156 一.测试环境介绍 Ansible管理主机: 系统:   CentOS6.8 IP Addr: 172.16.10.22 Linux管理服务器需安装pip.pywinrm插件 Windows客户端主机: 系统:   Server2008R2 SP1 IP Addr: 172.16.10.23 Windows机器需要安装或升级powershell4.0以上版本,Server2008R

Windows口令安全与破解之--Ntscan远程破解windows口

[实验目的] 1)理解Ntscan远程破解windows口令的原理 2)学习Ntscan远程破解windows口令的过程 [实验原理] 在现实网络环境中,主机可以会对外开放一些敏感端口,例如135.139.445,如果开放了这些端口,很可能遭受到入侵攻击,而本次实验,就是针对开放端口的主机进行远程破解登陆口令,本次实验采用的是139端口进行的安全检测. [实验步骤] 一.Ntscan远程破解windows口令 1.1 打开ntscan.exe 1.2在起始和结束ip上面,填上靶机ip 1.3连接

使用virt-manager远程管理windows鼠标漂移的问题

在使用virt-manager远程管理windows虚拟机时,鼠标漂移导致无法操作windows,很不方便.解决办法,在虚拟机配置文件中找到<input type='mouse' bus='usb'>把mouse改为tablet或者在 <devices> </devices>中添加<input type='tablet' bus='usb'>然后关机重新加载配置文件,问题解决. 或者virt-manager图形化界面操作 原文地址:http://blog.5

使用OpenSSH远程管理Linux服务器

一.使用OpenSSH远程管理Linux服务器 sshd是OpenSSH的服务器端守护进程,与之对应的Windows下客户端软件有SecureCRT/Xshell/PuTTY等. OpenSSH一般为默认安装在Linux系统中,安装目录为/etc/ssh.对应的服务器配置文件为/etc/ssh/sshd_config,配置文件中各选项的含义如下: 对sshd_config文件配置完毕,重启sshd守护进程,使修改生效(命令为:systemctl restart sshd); 最后一步是设置ssh

通过Powershell远程管理Windows Azure上的虚拟机

Windows Azure上连接虚拟机想必不是件难事尤其是连接Windows操作系统简单点几下鼠标通过远程桌面RDPWindows Azure虚拟机会帮助你自动创建远程连接RDP的Profile你就能体验到公有云带来的便利.由于虚拟机外部连接都是通过端口映射连接的.当然基于区域网络目前Azure.CN中新创建的虚拟网络已经都是区域网络了当然你目前仍然可以创建基于地缘组的虚拟网络虽然并不推荐后可以创建虚拟机实例级别的公共IP地址所以你也可以跳过通过"云服务"端口映射的RDP而直接连接虚拟

SSH安全登录(远程管理)22端口

Linux管理Linux 先加密再发送数据,更安全 一    联机加密工具 非对称钥匙对加密 安装    默认安装    openssh 启动    默认开机自启动    service    sshd    restart 配置文件/etc/ssh/sshd_config 二    ssh远程安全联机    掌握 ssh    用户名@ip 三    scp 网络复制,网络文件传输    掌握 1    下载 scp    用户名@ip:路径    本地路径(sshcp) 源文件       

Linux远程管理Windows程序Rdesktop详解

#rpm –q rdesktop                       //查找是否已经安装 #yum install rdesktop                //使用yum安装 rdesktop 使用简单,windows也不和装什么服务端,是要把远程桌面共享打开就行了 具体使用方法要先打开终端,然后输入以下命令: rdesktop -u yournape -p password -g 1024*720 192.168.0.2 rdesktop为使用远程桌面连接的命令: -u 用户