首页 > 代码库 > 如何从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脚本?