日期:2014-05-16  浏览次数:21244 次

apache mina 学习笔记三(子项目SSHD)

SSHD 是apache mina的一个子项目,它提供了客户端和服务器端使用SSH协议的功能。当然它也是基于MINA的。

官网地址

http://mina.apache.org/sshd-project/index.html

?

当我们从其他平台访问Linux的时候,通常会用某些工具,比如xmanager,putty之类的东西。

这些工具用的就是SSH协议连接到linux上的,当然Linux 机器上必须启动SSHD的守护进程。

?

因为一般情况下我们连接sshd服务用的多,而用java作为sshd服务用的少,所以下面例子就是作为一个客户端去连接linux的情况。

?

一、下载

首先我们需要上官网下载一个可用版本,目前来说最新的版本是0.10.1。

本例所需JAR包

mina-core-2.0.7.jar

slf4j-api-1.6.4.jar

slf4j-jdk14-1.6.4.jar

sshd-core-0.10.1.jar

?

直接上代码了

package cn.tang.test.ssh;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

import org.apache.sshd.ClientChannel;
import org.apache.sshd.ClientSession;
import org.apache.sshd.SshClient;
import org.apache.sshd.common.util.NoCloseInputStream;
import org.apache.sshd.common.util.NoCloseOutputStream;

public class SSHDTest {
	private static final int port = 22;

	public static void main(String[] args) throws InterruptedException, IOException {
		SshClient client = SshClient.setUpDefaultClient();
		client.start();
		
		ClientSession session = client.connect("root", new InetSocketAddress("192.168.74.137", port)).await().getSession();
		session.addPasswordIdentity("111111");
		session.auth();
		ClientChannel channel =session.createShellChannel();
		channel.setOut(new NoCloseOutputStream(System.out));
        channel.setErr(new NoCloseOutputStream(System.err));
        channel.setIn(new NoCloseInputStream(System.in));
		channel.open();

		channel.waitFor(ClientChannel.CLOSED, 0);
		channel.close(false);
		session.close(false);
		client.stop();
	}
}

?这里,我把进程的输入,输出,异常绑定到ssh的channel。

如果你想只发一次命令的话,用的是另外一种

//		ClientChannel channel = session.createExecChannel("ifconfig");

?如果你是用这种channel,程序不再接受你下面的命令了。

?