引入依赖
xml
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>2.9.1</version>
</dependency>
示例代码,可以直接执行,也可以做替换命令、维护session等修改
java
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
bash
*** [main] SshdUtil INFO -Output:root\n
*** [main] SshdUtil INFO -Error: