非ssh命令的远端服务器的操作方法

这篇文档是以前写的。这几天要使用ssh远程操作机器,突然想到了,就把它找出来。测了一把,还行。

1. 介绍

现阶段的服务一般都会运行在一个集群上面,这样,就遇到一个无法回避的问题:服务器(A)如何在服务器(B)上面执行命令或程序。
对于这个问题,常见的两种方法是:
1) 节点A与节点B建立SSH互信关系。当节点A需要在节点B上面执行命令的时候,直接用ssh登录到节点B上面(这也是使用最多的一种方式)。
优点:执行简单。
缺点:在安装配置的时候,复杂。不能够动态增加一个节点

2) 当需要登录到节点B的时候,执行export命令,利用程序的方式临时登录到节点B上面去执行命令。
优点:安装时,无需额外进行配置。
缺点:执行命令的时候,比较复杂。而且还需要考虑环境变量的配置。

Cloudstack的源码中为我们提供第三种方法,为我们解决了上面说到的问题。Cloudstack中的Agent节点是动态加入到Management中去的,在加入之前,可能无法确认哪台机器会加入集群中。因此它通过一个第三方库:trilead-ssh2-build213-svnkit-1.3-patch.jar来实现

2. 代码说明

需要说明的是,这里所使用的代码是从Cloudstack源码中抽取出来的并进行相应的简化

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
      com.trilead.ssh2.Connection sshConnection =  new com.trilead.ssh2.Connection("192.168.0.220", 22); 
      sshConnection.connect(null, 60000, 60000);
      if (!sshConnection.authenticateWithPassword("root", "root")) {
          System.err.println("Fail to authenticate");
          return ;
      }
      if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "cd /opt; ls -l ", 3)) {
          System.err.println("fail to tests");
          return ;
      }
      System.out.println("Success to execute test..");
}

从代码中,可以看出,它一共分为三步:
1)创建ssh2连接对象

com.trilead.ssh2.Connection sshConnection =  new com.trilead.ssh2.Connection("192.168.0.220", 22); 

参数说明:第一个参数为远端服务器的IP。 第二个参数为远端服务器的ssh端口。
一般来说默认的ssh登录端口就是22
2)初始化ssh2连接对象

 sshConnection.connect(null, 60000, 60000);

此时开始进行连接。后两个参数为超时时间。可以不用管它

if (!sshConnection.authenticateWithPassword("root", "root"))

当连接后,就开始需要输入用户名与密码了。

3)连接创建成功后,就可以执行远端的命令了。

 if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "cd /opt; ls -l ", 3)) {
     System.err.println("fail to tests");
     return ;
 }
 System.out.println("Success to execute test..");

SSHCmdHelper.java为cloudstack封装的一个命令执行程序。详情可以看它的源码。解释一下它的三个参数:
sshConnection: 我们之前创建的ssh连接
“cd /opt; ls -l “: 需要执行的命令
3: 这个数字3,当上面的命令执行失败后,会重试3次,如果3次都失败了,才会返回失败
从代码中,我们可以看出来,它的返回值为boolean,也就是如果出错,它无法将出错信息带回。这也是它的一个缺点。另一点需要注意,因此在linux中返回值0表示成功,因此我们执行的命令也需要保证这一点

3. 总结

从代码中的,我们可以看到一个SSH的登录过程,因此远端服务器需要能够通过ssh方式登录,否则这种方式就无法登录。最后附上源码。
http://download.csdn.net/detail/eyoulc123/9475606
注:SSHCmdHelper.java第146行的system.out是我加的。大家可以把它干掉。呵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值