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