求救!求救ssh2 远程Shell脚本执行工具的问题

问题描述

最近在用ssh2远程Shell脚本执行工具写了一个代码测试执行普通的命令都可以比如“ls”啦什么的都可以但是执行动态的就不可以比如“top”也没有错误只是返回的是“”。求大家帮忙呀!下面是代码main是测试用的是root的权限packagecom.syxp.sjyw.util;importjava.io.IOException;importjava.io.InputStream;importjava.nio.charset.Charset;importch.ethz.ssh2.Connection;importch.ethz.ssh2.Session;importcom.syxp.sjyw.model.ScheduledTask;/***远程Shell脚本执行工具**@authorAdministrator*/publicclassRemoteShellToolimplementsSSHHelper{privateConnectionconn;privateStringipAddr;privateStringcharset=Charset.defaultCharset().toString();privateStringuserName;privateStringpassword;privateStringcmd;publicRemoteShellTool(){}publicRemoteShellTool(StringipAddr,StringuserName,Stringpassword,Stringcharset){this.ipAddr=ipAddr;this.userName=userName;this.password=password;if(charset!=null){this.charset=charset;}}/***登录远程Linux主机**@return*@throwsIOException*/publicbooleanlogin()throwsIOException{conn=newConnection(ipAddr);conn.connect();//连接returnconn.authenticateWithPassword(userName,password);//认证}/***执行Shell脚本或命令**@paramcmds命令行序列*@return*/publicStringexec(Stringcmds){InputStreamin=null;Stringresult="";try{if(this.login()){Sessionsession=conn.openSession();//打开一个会话session.execCommand(cmds);in=session.getStdout();result=this.processStdout(in,this.charset);conn.close();}}catch(IOExceptione1){e1.printStackTrace();}returnresult;}/***解析流获取字符串信息**@paramin输入流对象*@paramcharset字符集*@return*/publicStringprocessStdout(InputStreamin,Stringcharset){byte[]buf=newbyte[1024];StringBuffersb=newStringBuffer();try{while(in.read(buf)!=-1){sb.append(newString(buf,charset));}}catch(IOExceptione){e.printStackTrace();}returnsb.toString();}publicstaticvoidmain(String[]args){RemoteShellToolest=newRemoteShellTool("192.168.248.128","root","woaiwojia","utf-8");try{if(est.login()){System.out.println(est.exec("top"));//System.out.println(est.exec("exit"));}else{System.out.println("***连接失败***");}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicStringexecCmd(StringipAddr,Stringusername,Stringpassword,Stringcharset,Stringcmd){this.ipAddr=ipAddr;this.userName=username;this.password=password;this.charset=charset;if(charset!=null){this.charset=charset;}try{if(login()){Strings=exec(cmd);exec("exit");returns;}else{//System.out.println("连接失败");return"***连接失败***";}}catch(IOExceptione){e.printStackTrace();return"***SSH异常***";}}publicStringexecCmd(ScheduledTaskst){this.ipAddr=st.getIp();this.userName=st.getUsername();this.password=st.getPassword();if(charset!=null){this.charset=st.getCharset();}try{if(login()){Strings=exec(st.getCmd());exec("exit");returns;}else{//System.out.println("连接失败");return"***连接失败***";}}catch(IOExceptione){e.printStackTrace();return"***SSH异常***";}}publicStringgetIpAddr(){returnipAddr;}publicvoidsetIpAddr(StringipAddr){this.ipAddr=ipAddr;}publicStringgetCharset(){returncharset;}publicvoidsetCharset(Stringcharset){this.charset=charset;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringgetCmd(){returncmd;}publicvoidsetCmd(Stringcmd){this.cmd=cmd;}}

解决方案

解决方案二:
该回复于2011-05-13 08:54:46被版主删除

时间: 2025-01-01 12:56:30

求救!求救ssh2 远程Shell脚本执行工具的问题的相关文章

shell脚本执行时报"bad interpreter: Text file busy"的解决方法

在执行一个shell脚本时,遇到了"-bash: ./killSession.sh: /bin/bash: bad interpreter: Text file busy"错误提示,如下所示: [oracle@DB-Server bin]$ ./killSession.sh      -bash: ./killSession.sh: /bin/bash: bad interpreter: Text file busy 此时只需要在#!/bin/bash,加一空格#! /bin/bash

mail2sh 1.4-3发布 shell命令执行工具

Mail2sh是一款能够通过电子邮件执行shell命令的工具.工作原理是用电子邮件发送到你主机上的一个特定用户,如果在/etc/passwd中的用户名和密码相匹配,命令将立即执行.使用者的权限执行命令,并结合PGP模块确保了一定程度的使用安全.但是请用户注意,系统本身不加密,所以强烈建议使用加密的机制是出于安全原因. mail2sh 1.4-3版本在http://www.aliyun.com/zixun/aggregation/33836.html">Debian 5 and 6软件包中增

如何在Shell脚本中跟踪调试命令的执行

在 shell 脚本调试系列 中,本文将解释第三种 shell 脚本调试模式,即 shell 跟踪,并查看一些示例来演示它如何工作以及如何使用它. 本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的例子展示了如何在这些模式下启用 shell 脚本调试. 如何在 Linux 中启用 Shell 脚本的调试模式 如何在 Shell 脚本中执行语法检查调试模式 shell 跟踪简单的来说就是跟踪 shell 脚本中的命令的执行.要打开 shell 跟

如何在 Shell 脚本中跟踪调试命令的执行

在 shell 脚本调试系列 中,本文将解释第三种 shell 脚本调试模式,即 shell 跟踪,并查看一些示例来演示它如何工作以及如何使用它. 本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的例子展示了如何在这些模式下启用 shell 脚本调试. 如何在 Linux 中启用 Shell 脚本的调试模式 如何在 Shell 脚本中执行语法检查调试模式 shell 跟踪简单的来说就是跟踪 shell 脚本中的命令的执行.要打开 shell 跟

shell脚本中执行python脚本并接收其返回值的例子_linux shell

1.在shell脚本执行python脚本时,需要通过python脚本的返回值来判断后面程序要执行的命令 例:有两个py程序  hello.py 复制代码 代码如下: def main():     print "Hello" if __name__=='__main__':     main() world.py def main():     print "Hello" if __name__=='__main__':     main() shell 脚本 te

linux中php使用root权限执行shell脚本

今天晚上:19:30分,这个困扰了我好久的问题终于解决,其中的原理也终于弄清楚了,总之是利用sudo来赋予Apache的用户root的执行权限,下面记录一下: 利用php利用root权限执行shell脚本必须进行以下几个步骤:(所有步骤都是我亲自实验,若有不妥可指出,谢谢!) 1. 确定一下你的Apache的执行用户是谁.注:不一定就是nobody,我自行安装的httpd,我的Apache的用户就是daemon 2. 利用visudo为你的Apache执行用户赋予root执行权限,当然还有设置无

Linux中执行shell脚本的4种方法总结_linux shell

bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh.如果不加上./,bash可能会响应找到不到hello.sh的错误信息.因为目前的工作目录(/data/shell)可能不在

一个shell脚本编写小助手

功能: 1.自动检测否存在同名文件,存在则提示用户存在,并给出编辑,删除后创建,和退出3个选项 2.自动添加脚本版权信息(有自定义和默认2种方式) 3. 自动检测有无语法错误:如果有语法错误则提示用户是否退出,不退出则打开vim修改,直到修改正确为止 4.脚本编写成功后自动添加执行权限 用法: 执行脚本后面添加脚本名称即可 #!/bin/bash #:-------------CopyRight------------- #:Name:lustlost - 1.0 #:Date:2012-7-1

Linux Shell脚本系列教程(二):终端打印命令详解

  这篇文章主要介绍了Linux Shell脚本系列教程(二):终端打印命令详解,本文着重讲解了echo终端打印.printf终端打印两个打印出输出命令,需要的朋友可以参考下 终端打印 终端是交互式工具,用户可以通过它与shell环境进行交互.在终端中打印文本是大多数shell脚本和工具日常需要执行的基本任务.通过终端打印,人们可以知道系统的运行状态,这对用户来说是至关重要的. echo终端打印 代码如下: echo "Welcome to Bash" echo 'Welcome to