首发CSDN
http://blog.csdn.net/basecn/archive/2010/12/16/6080741.aspx
作者:BaseCN Email:
basecn@163.com
-----------------------------------------------
Jsch是JAVA的SSH客户端,使用的目的是执行远程服务器上的命令。
关于Session的使用,创建连接后这个session是一直可用的,所以不需要关闭。由Session中open的Channel在使用后应该关闭。
测试了exec的方式,具体参考jsch自带example中的Exec.java。
有两个问题:
1、无法执行多条命令,每次ChannelExec在connect前要先setCommand,最后一次的设置生效。
2、由于第一个原因的限制,如果执行的命令需要环境变量(如JAVA_HOME),就没有办法了。这种方式执行基本的ls,ps之类的命令没有问题,需要复杂的环境变量时有点力不从心。
要是哪位知道exec如何解决上面现两个问题,请分享一下!
-----------------------------------------------
虽然exec可以得到命令的执行结果,但无法满足应用,无奈之下放弃exec转而使用ChannelShell。
在使用ChannelShell的时候需要特别关注jsch的输入和输出流的设置。
为了得到脚本的运行结果,设置jsch的outputStream为FileOutputStream,把shell的输出结果保存到本地文件。虽然最简单的方式是设置System.out为jsch的OutputStream,在控制台看到结果,只是无法保存下来。
短时间运行的程序,输入可以直接设置为System.in,而长期运行的程序不能使用人工方式输入,必须由程序自动生成命令来执行。所以使用PipeStream来实现字符串输入命令: