如何从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" [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的机会真的好难得啊...

时间: 2024-10-07 05:08:32

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

linux crontab定时任务运行shell脚本(shell执行sql文件)

今天做个linux定时任务(每晚12点把表汇总). 顺便写个博客记录一下~~ 为什么用linux定时任务,而不是在项目加定时任务呢?原因就是防止因为各种原因项目崩溃..所以就用了更加稳定的linux定时任务(我是这么想的( ^_^ )). 起初我感觉很简单,以为顶多半小时就搞定了,,,结果从10点弄到12点半才搞定(主要是我英语太渣和数据库报错导致)... ︿( ̄︶ ̄)︿废话到此结束--------------- crontab 格式     * * * * *      XXX 分    时

Linux基础之-利用shell脚本实现自动监控系统服务

目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件:1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1); 需要的文件:    1. python邮件发送工具: 2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户: 3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令

<<linux命令行与shell脚本编程大全>>学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

【持续更新中】Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章

<Linux命令行与Shell脚本编程大全(第3版)>读书笔记 第十二章 使用结构化命令 根据条件使脚本跳过某些命令,这样的命令称为结构化命令(structured command).结构化命令允许改变程序执行的顺序. If-then语句: If command Then Commands Fi 如果if后的command执行退出码是0(也就是执行成功了),then后面的语句就会被执行. 也可以写成: If command; then Commands Fi 注意了,if后的command结果

Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]

此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M) 原文地址:https://www.cnblogs.com/pluse/p/9408724.html

Linux 集群使用 Shell 脚本自动完成免密登录

在部署 Linux 集群环境的时候,时钟同步 (NTP) 必定用到,而某些时候可能也需要用到主机免密登录,5 节点以下还可以手动配置,但如果节点规模较大,则需要考虑自动化了. 使用 Shell 脚本简单快速,上手容易. 代码如下,请自行按需要修改,比较容易理解. #!/bin/bash # by liuxg # 2019.05.15 # passwdless.sh # echo # -n 不要在最后自动换行 # -e 处理特殊字符 # expect是一个免费的编程工具语言,用来实现自动和交互式任

linux操作系统-vim和shell脚本常用知识总结

HOST=$(/bin/hostname)将()里的命令执行后的结果赋值给HOST变量 #------------------------------------------------^M /etc/rc.d/  level3的用户login后, 将自动启动一个指定的shell  # ---------------------------------------------  $?  对上一次命令执行成功与否成功$?为0  判断文件是否存在且是否为文件 [ -f file ] 判断文件是否存在