Nginx测试中如何实现远程执行程序
需求:
在进行Nginx测试的过程中,经常需要对远程服务器执行一些shell脚本、应用程序或系统命令。一般简单的方法是将测试代码放到所需的远程服务器上来运行,或者使用staf框架来协助远程执行。
但我个人认为,staf框架比较适合用于执行sudo权限的命令,而且他对服务器环境有一些额外的要求,比如远程服务器和本机均必须安装staf,而且执行输出结果也不是很清晰。
那有没有轻量级的远程执行方法,并且能将执行结果完整的输出呢?在这里要感谢我以前的同事:一环同学,是他提供了这个宝贵的经验,采用JAVA源码提供的工具: ch.ethz.ssh2
?
解决方案:
首先介绍ch.ethz.ssh2的一些方法:
1.?ch.ethz.ssh2.Connection:
? ? ? ? ? Connection对象,用于与一台SSH-2 服务器建立加密的TCP/IP连接;
2. authenticateWithPassword方法:?
? ? ? ? ? 在连接建立成功之后,向远程服务器发起认证。该方法通过用户名+密码的方式来进行验证。
? ? ? ? ? 如果验证阶段完成,将会返回true。如果远程服务器拒绝请求或者需要进一步的验证操作,则返回false。
3. openSession方法:
? 在连接建立完成且验证通过之后,打开一个新的会话用于后续的程序执行操作。tips:一个连接可以打开多个会话。
4.?ch.ethz.ssh2.Session:
? 会话对象,是用于执行远程程序的。这个程序包含了shell脚本、应用程序、系统命令。tips:多个会话可以同步执行。
5. execCommand方法:
? 用于在远程服务器上执行命令。
6. startShell方法:
? 用于在远程服务器上启动shell脚本。
还有其他对象和方法在这里先不进行介绍,大家有兴趣可以参见开源文档或代码——http://www.java2s.com/Open-Source/Java-Document/Net/Ganymed-SSH-2/ch/ethz/ssh2
??
?
其次介绍使用这些方法的代码实现:
?
?
最后是代码执行及结果展示:
所执行的代码:
?
-S
The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.