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,程序不再接受你下面的命令了。