首页 > 代码库 > 如何从windows平台自动连接到Linux/Mac机运行shell脚本?
如何从windows平台自动连接到Linux/Mac机运行shell脚本?
不算什么新知识了,但是对于像我这样的小白来说,如果一早就能找到一篇这样从实战中总结出来的心得,就不会今天忙得只喝两杯水了(好吧,胆大心细脸皮厚是我的人生座右铭╭(╯^╰)╮)
背景:
某项目要求从性能测试工具LoadRunner中模拟并发用户调用位于一台mac虚拟机上的shell脚本。
putty 批量关机 http://alwaysyunwei.blog.51cto.com/3224143/1223455/
方法一:Plink windows bat(通用方法)
这个方法的原理是通过windows上免费的OpenSSH工具Putty带的plink工具实现远程登录服务器并自动运行shell脚本。
步骤1:下载plink.exe & putty.exe值本地目录,如d:\Proram Files\plink.exe。这两个软件都是免安装版的。
步骤2:将需要运行的shell脚本放到本地目录。如c:\test.sh
步骤3:创建一个tet.bat文件,并在其中写入如下命令:
=此方法本人测试没通,使用putty实现的
@echo off
d:
cd Program Files
plink -l [userName] -pw [password] -m c:\test.sh [ServerName or IP]
exit
保存后双击运行即可。在这里要注意的是因为我的plink.exe放在了D盘的program files这个文件夹下,也就是对应上面脚本的第二行和第三行。实际使用中需要换成当前放置plink.exe的目录。还有一点特别要注意的是想要运行的shell脚本是要放到你本地的,我一开始以为是放到server端,而且看到网上一些帖子也写的是server端,事实证明运行是通不过的,所以这里也需要注意。
在运行时,命令行会窗口弹出停一会,然后自动关闭。如果想检查test.sh里所写的是不是真的被运行了,建议在test.sh里加入一些debug的输出语句,把内容输出到某个文件,然后就可以通过Putty或者其他ssh client访问server并查看这个output文件了。
还需要说明的一点是在mac机的system preference/sharing配置里需要把remote logon勾选上,不然ssh连接的建立会失败。(这个我纠结了,最后还是Frank找到的solution~)
至于在LoadRunner中调用test.bat这个批处理文件就比较简单了,使用system()这个函数就可以了。perl或者shell脚本的调用同理。
PUTTY方法:
下载putty.exe (绿色版)
bat 如下
@echo off
@color 0A
set path=%cd%
cd %path%
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@192.168.0.132
pause
==附送重启脚本
@echo off
@color 0A
set path=%cd%
cd %path%
:input
@echo 0.101 ━━━━四川重庆API服务器━━━━
@echo 0.103 ━━━━四川重庆DAO服务器━━━━
@echo 0.130 ━━━━数据平台,四员联动服务器━━━━
@echo 0.131 ━━━━SAAS-API服务器━━━━
@echo 0.132 ━━━━SAAS-DAO服务器━━━━
@echo 0.180 ━━━━快消品服务器━━━━
set/p floor=......请输入需要重启的应用的服务器(如0.101、0.103、请输入101、103):
if %floor% neq 101 (
if %floor% neq 103 (
if %floor% neq 130 (
if %floor% neq 131 (
if %floor% neq 132 (
if %floor% neq 180 (
if %floor% neq 5 (
if %floor% neq 9 (
if %floor% neq 10 (
if %floor% neq 11 (
if %floor% neq 12 (
if %floor% neq 13 (
if %floor% neq 14 (
if %floor% neq 15 (
if %floor% neq 16 (
echo.
echo 请检查您输入的服务器是否存在
goto :input
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
if %floor%== 101 (
@echo 选择101,正在重启四川重庆API应用
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@0.130
@echo 重启四川重庆API应用结束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 103 ( 0.130
@echo 选择103,正在重启四川重庆DAO应用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@0.130
@echo 重启四川重庆DAO应用结束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 130 ( 0.130
@echo 选择130,正在重启数据平台四员联动应用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@0.130
@echo 重启数据平台四员联动应用结束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 131 ( 0.130
@echo 选择131,正在重启SAAS-API应用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@0.130
@echo 重启SAAS-API应用结束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 132 ( 0.130
@echo 选择132,正在重启SAAS-DAO应用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@0.130
@echo 重启SAAS-DAO应用结束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 180 ( 0.130
@echo 选择180,正在重启快消品应用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tomcat@0.130
@echo 重启快消品应用结束........
goto :end
)
)
:end
@echo 重启Tomcat服务结束━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
pause
方法二:LR自带的RTE协议录制
这个方法的原理是采用LoadRunner自带的RTE(Remote Terminal Emulation)协议直接录制用户建立SSH连接和activity的过程并转化为LR脚本。步骤如下:
步骤1:修改recording options.(以下仅针对录制Linux server)
1) 取消所有与IBM相关的勾选
2)选择Session type=Telnet,端口=22,terminal type=SSH, 然后点击connect按钮进行录制。
步骤2:修改和调试脚本。
步骤3:在controller中运行脚本。
前面两步都没什么问题,但是步骤3就碰到了各种拦路虎。首先是不能启用ip欺骗,否则会出现你所选择的协议不支持按线程运行的提示;取消ip欺骗后运行,发现generator CPU资源很快就被mdrv.exe进程占满了,100%后直接死在那了。即使运行单用户,mdrv.exe也会占50%左右的CPU。我看到网上有些同行用RTE协议在单台机器上模拟过300左右的用户,不知道为什么我录制的ssh登录 echo命令执行 exit会这么占资源..在群里问了也没人知道,可能这个协议在公司里用得不是那么多吧,据说银行业比较会用到。还有最后一个问题是用户跑完第一次迭代就等在那里,不再继续跑下一个迭代,也不退出系统。Vugen里多迭代完全无障碍啊,也检查过controller里pacing什么的都没问题,挠破头也没想出来是为什么,抓狂啊!
目前今天的成果就是这样了,最后可行的还是方案一。方案二后续可以继续研究,目前看来IT的项目中需要用到http之外的协议并且思科买了license的机会真的好难得啊...
本文出自 “隐隐的泪” 博客,转载请与作者联系!
如何从windows平台自动连接到Linux/Mac机运行shell脚本?