SSHD实践(三)使用Exec执行远程命令
Sftpadmin 发布于:2023-11-25 23:00:12
阅读:loading
前面介绍了使用Apache Mina的ChannelSftp和SftpFileSystem实现对远程文件的操作,本文继续实践SSHD的系列文章,使用ChannelExec来执行一些远程服务器的命令。
ChannelExec是Apache Mina SSHD中的一个类,它用于执行远程命令。以下是ChannelExec的详细介绍和特征:
(1)远程命令执行:ChannelExec允许您在远程服务器上执行命令,它通过SSH协议将命令发送到服务器,并返回命令的执行结果。这使得您可以通过SSH连接远程服务器并执行特定的命令。
(2)异步执行:ChannelExec支持异步执行命令,这意味着您可以在命令发送之后继续执行其他操作,而不需要等待命令执行完毕。它使用回调机制来处理命令的执行结果,使您能够通过事件处理代码异步获取命令的执行状态和结果。
(3)命令参数设置:ChannelExec允许您设置命令的各种参数,例如工作目录、环境变量、输入流等。您可以根据需要设置这些参数,以满足对命令执行的特定要求。
(4)输入输出处理:ChannelExec提供了输入输出流来处理命令的输入和输出。您可以将输入流写入到远程命令的标准输入,然后通过读取输出流来获取命令的标准输出。这使您可以与远程命令进行交互,并获得执行结果。
(5)命令状态监控:通过ChannelExec,您可以监视命令的执行状态,包括是否执行成功、执行时间等。这对于需要实时监控和处理命令执行过程的场景非常有用。
总的来说,ChannelExec提供了一种在SSH连接上执行远程命令的方式,以及处理命令输入、输出、参数和状态的能力。它灵活性高、可扩展性强,适用于需要与远程服务器进行命令交互和执行的场景。
package cn.chendd.sshd;
import .....;
/**
* 运行命令测试
*
* @author chendd
* @date 2023/11/25 20:50
*/
public class ExecTest {
/**
* 执行脚本
*/
@Test
public void commandTest() throws IOException {
SshClient sshClient = SshClient.setUpDefaultClient();
sshClient.start();
SftpParam param = new SftpParam();
ClientSession session = sshClient.connect(param.getUsername(), param.getHost(), param.getPort()).verify(5 , TimeUnit.SECONDS).getSession();
session.addPasswordIdentity(param.getPassword());
session.auth().verify();
String commands = StringUtils.join(new String[] {"ip addr" , "pwd" , "ping -c 5 127.0.0.1" , "ll" , "ls"} , ";");
System.out.println("执行命令列表:" + commands);
try (ChannelExec channel = session.createExecChannel(commands)) {
channel.open().verify(5 , TimeUnit.SECONDS);
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(channel.getInvertedOut()))) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
}
System.out.println("ExecTest.execTest");
session.close();
sshClient.close();
}
}
(1)代码为示例,写的比较随意,某些IO资源的释放应以更严格的形式编写;
(2)执行的命令共计5个,分别如下:
① ip addr:输出本机的IP地址信息;
② pwd:输出当前上下文的所在路径;
③ ping -c 5 127.0.0.1:获取与本机的网络连接,共计输出5次;
④ ll:获取当前路径的文件夹结构列表;
⑤ ls:获取当前路径的文件夹内的文件和文件夹名称列表;
(1)本次实践Apache Mina SSHD共计三块知识,分别是使用Sftp访问远程服务器、FileSystem、Exec执行远程服务器命令、Shell执行远程服务器命令,至于它还可以作用于的端口转发等功能不做摸索;;
(2)本文实现了Apache Mina SSHD的基于ChannelExcel执行远程命令的示例,在命令执行的同时也可实时输出命令执行的结果输出;
(3)示例中的“ll”命令执行时未获取到执行的结果,具体原因没有深究,多个命令在执行完毕后,自动退出程序;
(4)本文实现了Apache Mina SSHD实现远程服务器的命令执行,完整示例工程代码可见《附件下载.zip》;
点赞