设为首页 收藏本站
查看: 766|回复: 0

[经验分享] 通过sshxcute-1.0来实现java程序编写的linux的命令

[复制链接]

尚未签到

发表于 2015-10-29 13:53:11 | 显示全部楼层 |阅读模式
    由于我将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 void main(String[] args) {
// TODO Auto-generated method stub
// Initialize a ConnBean object, parameter list is ip, username,
ConnectWithSSH test =new ConnectWithSSH();
String ip="192.168.1.21";
String username="grid";
String passwd="liujiyu";
String command="ls /home";
test.ConnectSSH(ip, username, passwd, command);
}


import net.neoremind.sshxcute.core.ConnBean;
import net.neoremind.sshxcute.core.SSHExec;
import net.neoremind.sshxcute.task.CustomTask;
import net.neoremind.sshxcute.task.impl.ExecCommand;

public class ConnectWithSSH {

public void ConnectSSH(String ServerIP,String username,String password,String command ){
ConnBean cb = new ConnBean(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 = new ExecCommand(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")
  
  
  
      
      
    

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-132359-1-1.html 上篇帖子: ubuntu下安装nginx php mysql 下篇帖子: Kali Linux下破解WIFI密码挂载usb无线网卡的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表