当前位置: 首页 > 工具软件 > sshxcute > 使用案例 >

sshxcute_通过sshxcute-1.0来实现java程序编写的linux的命令

司徒俊良
2023-12-01

由于我将oracle和hadoop之间的交互暂时用的是sqoop-1.4.5,也就是sqoop1系列。但是sqoop1系列主要的都是通过命令行的方式来实现oracle与hadoop之间的交互。但是我最初的想法是通过java来操作sqoop,从而实现oracle与hadoop之间的交互工作是全自动化的。通过google和百度,最后找到了有几种方法。但是其最实用的方法就是用sshxcute-1.0来实现执行linux命令行的方法。下面主要将其过程记录一下:

要使用sshxcute-1.0,必须在http://code.google.com/p/sshxcute/网上下载sshxcute-1.0.jar包。但是由于大陆将google封了,无法访问,最后通过亚峰利用VPN技术来实现下载。

下载好后,直接将jar包添加到对应的工程目录下即可。

下面通过一个示例来测试其强大的功能:请看下面的代码:

public static voidmain(String[] args) {//TODO Auto-generated method stub//Initialize a ConnBean object, parameter list is ip, username,

ConnectWithSSH test =newConnectWithSSH();

String ip="192.168.1.21";

String username="grid";

String passwd="liujiyu";

String command="ls /home";

test.ConnectSSH(ip, username, passwd, command);

}

importnet.neoremind.sshxcute.core.ConnBean;importnet.neoremind.sshxcute.core.SSHExec;importnet.neoremind.sshxcute.task.CustomTask;importnet.neoremind.sshxcute.task.impl.ExecCommand;public classConnectWithSSH {public voidConnectSSH(String ServerIP,String username,String password,String command ){

ConnBean cb= newConnBean(ServerIP, username, password);

SSHExec ssh= null;try{//Put the ConnBean instance as parameter for SSHExec static method//getInstance(ConnBean) to retrieve a singleton SSHExec instance

ssh =SSHExec.getInstance(cb);//Connect to server

ssh.connect();//执行的命令行任务

CustomTask sampleTask = newExecCommand(command);//执行,并对执行后的结果进行处理

net.neoremind.sshxcute.core.Result res =ssh.exec(sampleTask);//Check result and print out messages.

if(res.isSuccess) {

System.out.println("Return code: " +res.rc);

System.out.println("sysout: " +res.sysout);

}else{

System.out.println("Return code: " +res.rc);

System.out.println("error message: " +res.error_msg);

}

}catch(Exception e) {

e.printStackTrace();

}finally{

ssh.disconnect();

}

}

}

以上代码执行完之后结果为:

SSHExec initializing ...

Session initialized and associated with user credential liujiyu

SSHExec initialized successfully

SSHExec trying to connect grid@192.168.1.21

SSH connection established

Command is ls /home

Connection channel established succesfully

Start to run command

grid

这里需要注意一个问题:通过远程连接到linux主机上时,在执行命令时,命令前面已经是他的完全路径,不能是简单的一个命令,否则会出现不认识在该命令。如

CustomTask sampleTask1 = new ExecCommand("/home/grid/sqoop-1.4.5/bin/sqoop help")

或者在执行该命令之前,执行source /etc/profile。但是要注意这句话要跟所要执行的命令一起放在一起,用分号隔开。如下所示: (如果两个命令不放在一起,将会出现原来同样的错误)

CustomTask sampleTask1 = new ExecCommand("source /etc/profile; sqoop help")

 类似资料: