阅读量:1
引入依赖
<dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-core</artifactId> <version>2.9.1</version> </dependency>
示例代码,可以直接执行,也可以做替换命令、维护session等修改
package com.demo.demo; import lombok.extern.slf4j.Slf4j; import org.apache.sshd.client.SshClient; import org.apache.sshd.client.channel.ChannelExec; import org.apache.sshd.client.channel.ClientChannelEvent; import org.apache.sshd.client.future.AuthFuture; import org.apache.sshd.client.future.ConnectFuture; import org.apache.sshd.client.session.ClientSession; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.EnumSet; import java.util.concurrent.TimeUnit; @Slf4j public class SshdUtil { public static final String WHO_AM_I = "whoami"; public static void main(String[] args) { execute("**.**.**.**", 22, "root", "*****"); } private static void execute(String host, int port, String username, String password) { SshClient client = SshClient.setUpDefaultClient(); ClientSession session = null; try { client.start(); ConnectFuture connectFuture = client.connect(username, host, port).verify(10, TimeUnit.SECONDS); if (connectFuture.isConnected()) { session = connectFuture.getSession(); session.addPasswordIdentity(password); AuthFuture auth = session.auth().verify(10, TimeUnit.SECONDS); if (auth.isSuccess()) { channelCmd(session, WHO_AM_I); } } } catch (IOException e) { log.error("执行异常", e); } finally { try { if (session != null) { session.close(); } client.close(); } catch (IOException e) { log.error("关闭异常", e); } } } private static void channelCmd(ClientSession session, String cmd) throws IOException { ChannelExec channel = session.createExecChannel(cmd); ByteArrayOutputStream output = new ByteArrayOutputStream(); ByteArrayOutputStream outputErr = new ByteArrayOutputStream(); channel.setOut(output); channel.setErr(outputErr); channel.open(); channel.waitFor(EnumSet.of(ClientChannelEvent.CLOSED), 0); log.info("Output:{}", output.toString().replace("\n", "\\n")); log.info("Error:{}", outputErr.toString().replace("\n", "\\n")); } }
输出如下,分别代表了输出流stdout和错误输出流stderr
*** [main] SshdUtil INFO -Output:root\n *** [main] SshdUtil INFO -Error: