引入依赖
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>2.9.1</version>
</dependency>
示例代码,可以直接执行,也可以做替换命令、维护session等修改文章来源:https://www.toymoban.com/news/detail-762440.html
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文章来源地址https://www.toymoban.com/news/detail-762440.html
*** [main] SshdUtil INFO -Output:root\n
*** [main] SshdUtil INFO -Error:
到了这里,关于org.apache.sshd的SshClient客户端 连接服务器执行命令 示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!