欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用SSH连接LINUX

程序员文章站 2024-02-27 17:20:45
...

最近项目上决定使用华为的NAS,不得不说,华为的NAS照NetApp比起来,差距还是挺大的,至少NetApp提供了非常全面的各种语言实现的API,而且文档也非常的全面,可以非常容易的嵌入我们的系统中。而华为只有可怜的N8000命令行,并没有提供任何语言实现的API,这无疑给开发带来了很大的麻烦。最后商议决定,程序通过SSH协议远程执行华为的命令行。上网上简单看了一下,比较出名的第三方开源框架是JSCH,虽然网上已经有很多文章说明此框架的用法,但是在开发过程中仍然有一些小细节需要注意,特此Share一下,代码如下:

 

 

JSch jsch = new JSch();
String command = "storage pool free";
String host = "10.121.43.7";
String name = "master";
int port = 22;
String password = "[email protected]#E$R%T";
Session session = jsch.getSession(name,host, port);
Properties config = new Properties(); 
//设置不做检查
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
//设置密码
session.setPassword(password);
session.connect();
ChannelExec shell = (ChannelExec)session.openChannel("exec");
shell.setEnv("SFS_OUTPUT","xml");
shell.setCommand(command);
shell.connect();
InputStream inputStream = shell.getInputStream();
int index = -1;
byte[] buffer = new byte[1024];
ByteArrayOutputStream out = new ByteArrayOutputStream();
while(!shell.isClosed()){
	while((index = inputStream.read(buffer, 0, buffer.length))!=-1){
		out.write(buffer, 0, index);
	}
	try {
            Thread.sleep(500);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
out.flush();
out.close();
inputStream.close();
shell.disconnect();
session.disconnect();
String resultXml = new String(out.toByteArray());
System.out.println(resultXml);

 需要注意的是代码的第十六行,此参数用于设置SSH协议的环境,华为的存储这点就比较恶心,如果不设置这个变量,那么默认给你返回的是文本,而不是XML,当初在这个位置上卡了好久,希望日后能方便众人。