如何从windows平台自动连接到Linux/Mac机运行shell脚本?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从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" to[email protected]

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" [email protected]

@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" [email protected]

@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" [email protected]

@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" [email protected]

@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" [email protected]

@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" [email protected]

@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脚本?的主要内容,如果未能解决你的问题,请参考以下文章

win10远程连接linux samba,如何从Win10连接到Linux Samba共享

如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)

如何从 WSL 连接到本地 Windows SQL Server 实例?

如何从 WSL 连接到本地 Windows SQL Server 实例?

如何使用 Docker Desktop for Windows 从主机连接到 Cassandra

如何从 Windows 10 UWP 应用程序连接到 SQL Server 数据库