shell实现批量在多台windows服务器上执行同一命令并获取返回结果
1. 需求
在对windows服务器的运维当中,如果要查看当前的主机名、资源使用、软件安装情况等,大家是怎么操作呢,是登进去鼠标挨着点击查看,还是通过命令呢?貌似命令的方法比较专业一点。但是,如果要查看50台、100台甚至更多服务器的这些信息,好像就不这么简单了。
创新互联公司专注于都匀企业网站建设,响应式网站建设,电子商务商城网站建设。都匀网站建设公司,为都匀等地区提供建站服务。全流程按需制作,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
有没有想过,敲一条命令,十几秒钟,就可以查看多台windows服务器的主机名、资源使用、软件安装情况等信息呢;或者还是通过一条命令,就可以启动或者停止N台windows服务器的系统服务、重启\关机、修改注册表等等,你能想到的大部分操作,在经过前期简单部署后,以后只通过一条命令,就可以实现同时对多台windows服务器的管理。下面就把这个设想实现。
2. 实现原理及展示
2.1原理
通过我在shell下写的脚本程序,利用Python中的paramiko模块,通过ssh协议验证windows的登录信息,然后调用windows的PowerShell来实现命令的执行。目前测试过windows server2008R2和 2012R2 服务器,可以正常执行。
2.2展示2个简单例子:执行脚本后,输入windows的PowerShell命令即可
查询主机名
查看CPU使用率
只要是PowerShell支持的,都可以批量执行了。我这里只是2台测试,当然100台也一样出结果。
3. 准备
3.1 一台Centos系统: 我使用的虚拟机centos6.6 用来执行脚本,然后执行windows命令。需要有python(一般已经安装了)
3.2 软件:freesshd 官网上下载即可,主要是在被管理的windows服务器上安装,实现ssh验证
3.3 软件:SecureCRT或者Xshell 用来连接Centos虚拟机
3.4 可选软件:WinSCP 如果需要分发文件功能的话,windows服务器上还要需要安装此软件
4. 实现步骤及示例
4.1 各windows服务器安装freesshd和winscp(winscp可选): 测试中我使用了2台windows虚拟机
Winscp和freesshd的安装直接默认下一步即可;
Winscp安装完成后先在powershell里面执行命令,缓存主机密钥
cd 'C:\Program Files (x86)\WinSCP\' ; ./winscp.exe /console /command 'option batch continue' 'option confirm off' 'open sftp://root:root密码@centos主机IP:centos主机ssh端口
执行后按Y即可,如图:
freesshd安装完成后需要稍作设置,如图:
第一次运行freesshd如图
然后点击右下角的freesshd图标进行相关设置,SSH选项卡中,将Command shell设置成C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe如图:
Users选项卡中点击“Add…”
在弹出的窗口加入windows服务器的管理员账号,然后将Shell打上√ 如图:
最后可选择是否在Automatic updates里面关闭自动更新,我一般选择关闭
设置完成后,在开始-运行 里面键入”services.msc”将freesshd服务重启一下
Sshd在windows服务器上设置完成,可以通过telnet ssh端口的方式测试到windows的sshd服务是否正常,如telnet X.X.X.X 22
4.2 安全设置(可选):各windows服务器上配置ipsec只允许我们的centos服务器连接sshd的22端口,这样就避免了其他未授权的ssh连接,建议设置(不设置或者会设置的可跳过此步骤下列内容)。
开始-运行 里面键入”gpedit.msc” 进入 Windows设置-安全设置-IP安全策略,在本地计算机 创建策略即可:
先设置允许的主机,这里我们需要把centos主机加入允许,如部分截图,没截图的步骤默认点击“下一步”:
完成后“确定”即可,然后开始建立一条拒绝任何地址(源地址:任何IP地址)到windows本机地址sshd端口的策略,如图:
确定后安全设置完成,然后分配策略使其生效,如图:
如果启用了防火墙的话,还需要在防火墙里面设置允许freesshd程序通过防火墙,设置完成后可以在centos服务器上telnet X.X.X.X(windows服务器IP) 22 的方式来测试连接是否OK,如图测试正常:
4.3脚本准备
1)在本文后面下载shell脚本
2)在centos服务器中上传脚本,命令rz然后选择脚本上传即可(没有rz命令的通过yum install -y lrzsz命令安装),如图:
3)vim run_win_same_cmd.sh命令修改脚本,将后续要管理的各个服务器IP、用户名、密码加入其中,如图格式加入,然后保存即可。
注意ip,user,pwd的顺序是一一对应的,对应错误的话是无法通过验证的:
也可在windows中修改好了再上传到centos服务器,但是要注意最好运行下dos2unix命令转换一下。
4.4运行命令
1)在centos服务器中执行sh run_win_same_cmd.sh即可(注意脚本路径正确),如图,运行后提示选择,我们选择 1.批量运行windows命令 ,回车后提示输入windows命令,这里我们用一个简单的命令hostname来查看,如图:
再来个复杂点的命令(当然这种有点长的命令直接复制黏贴过来就行了),我们需要查看N台服务器各自的磁盘剩余空间:
不熟悉powershell命令的话可以参考下面链接里面一些常用的Powershell运维命令,当然,更多的强大命令就根据自己需要去发现了。
链接:Windows PowerShell运维人员常用命令收集整理
2)如果需要分发文件或者软件的话,可以在运行脚本后,选择2.批量分发文件到windows ,可以实现把文件批量分发到各个windows服务器,如图:
在windows服务器上查看文件已经复制过来了
5. 脚本下载地址
网站题目:shell实现批量在多台windows服务器上执行同一命令并获取返回结果
新闻来源:http://ybzwz.com/article/ppiscs.html