import com.jcraft.jsch.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class MyShell {
final static String ENDTAG = "!@#@!$@!23432432fdsafds#@$@#";
public static void main(String[] arg) {
String host = "96.126.126.117";
String username = "zgq";
String password = "xxxx";
String[] commandArr = { "ls", "date", "pwd" };
MyShell myShell = new MyShell();
myShell.runCommands(host, username, password, commandArr);
}
public void runCommands(String host, String username, String password,
final String[] commandArr) {
try {
JSch jsch = new JSch();
Session session = jsch.getSession(username, host, 4321);
session.setPassword(password);
UserInfo ui = new MyUserInfo() {
public void showMessage(String message) {
}
public boolean promptYesNo(String message) {
return true;
}
};
session.setUserInfo(ui);
session.connect(30000); // making a connection with timeout.
Channel channel = session.openChannel("shell");
final PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream();
pos.connect(pis);
channel.setInputStream(pis);
PipedInputStream pis2 = new PipedInputStream();
PipedOutputStream pos2 = new PipedOutputStream(pis2);
channel.setOutputStream(pos2);
final BufferedReader outBuffReader = new BufferedReader(
new InputStreamReader(pis2));
channel.connect(3 * 1000);
Thread inputThread = new Thread(new Runnable() {
public void run() {
try {
for (int i = 0; i < commandArr.length; i++) {
Thread.sleep(5000);
System.out.println("###begin run:" + commandArr[i]);
pos.write((commandArr[i] + "\n").getBytes());
}
pos.write((ENDTAG + "\n").getBytes());
pos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
pos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("inputThread end");
}
});
inputThread.start();
// channel.setOutputStream(System.out);
Thread outputThread = new Thread(new Runnable() {
public void run() {
String oneLine = null;
try {
while ((oneLine = outBuffReader.readLine()) != null) {
System.out.println("output:" + oneLine);
if (oneLine.contains(ENDTAG)) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outBuffReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("outputThread end");
}
});
outputThread.start();
inputThread.join();
outputThread.join();
channel.disconnect();
session.disconnect();
System.out.println("###end process commands###");
} catch (Exception e) {
e.printStackTrace();
}
}
public static abstract class MyUserInfo implements UserInfo,
UIKeyboardInteractive {
public String getPassword() {
return null;
}
public boolean promptYesNo(String str) {
return false;
}
public String getPassphrase() {
return null;
}
public boolean promptPassphrase(String message) {
return false;
}
public boolean promptPassword(String message) {
return false;
}
public void showMessage(String message) {
}
public String[] promptKeyboardInteractive(String destination,
String name, String instruction, String[] prompt, boolean[] echo) {
return null;
}
}
}
分享到:
相关推荐
在本项目中,我们关注的是“myshell”的实现,这是一个简化版的shell程序,具有基本的命令处理能力,例如改变工作目录(cd命令)。我们将探讨如何构建这样一个程序,并了解它涉及到的关键知识点。 首先,我们要理解...
"myshell命令解释器"是一个操作系统级别的作业,它是一个自定义的命令行接口,用于接收用户输入的命令并执行相应的操作。在这个项目中,我们将会深入理解操作系统如何处理用户输入的命令,以及如何构建一个简单的...
【标题】:“MyShell精简的远程控制” 在IT领域,远程控制技术是网络通信中的一个重要组成部分,它允许用户在一个设备上操作并控制另一个设备,通常通过网络进行。"MyShell精简的远程控制"是一个专为此目的设计的...
《深入理解Linux Shell脚本:myshell实践解析》 在Linux操作系统中,Shell是一个至关重要的工具,它作为用户与系统内核之间的接口,允许用户通过命令行与系统进行交互。"myshell_for_linux"项目正是一个简易版的...
The shell environment should contain shell=<pathname>/myshell where <pathname>/myshell is the full path for the shell executable (not a hardwired path back to your directory, but the one from which it...
"myshell_北理工操作系统实验六_" 是一个针对北京理工大学操作系统课程设计的实验项目,其目标是让学生亲手实现一个简单的Shell命令解析器,从而深入理解操作系统中的进程管理、输入/输出控制以及命令解析等核心概念...
【Linux_myshell】是一个专为Linux系统设计的C语言实现的命令行接口,它扩展了标准的bash shell功能,提供了更多的实用工具。这个shell程序旨在让用户在操作Linux系统时拥有更加便捷的交互体验,同时也为学习Linux...
### myshell操作系统 #### 概述 在Ubuntu环境下编写的`myshell`是一个简单的命令行解释器或Shell程序,它实现了基本的输入输出重定向(通过`和`>`符号)以及管道功能(通过`|`符号)。该Shell允许用户执行一系列...
设计简单的命令行myshell,并能在实验环境下运行。 要求支持的命令如下: 1. cd [directory] 将当前目录改为 [directory] 2. environ 列出所有环境变量 3. ls 列出指定目录下所有文件 4. help 显示所有支持的命令 5....
《操作系统——精髓和设计原理》中的项目myshell,并不是我自己写的,里面有很详尽的解释,这个shell的纠错能里能强大。 i.cd <directory> - change the current default directory to <directory>. If the ...
总之,"MyShell.zip"提供的源码为开发者提供了一个探索和学习shell编程的机会,无论是为了提升个人技能,还是为了创建独特的用户交互体验,都具有很高的价值。如果你对操作系统原理、shell编程或者想要打造自己的...
【标题】"MyShell_V1.2" 是一个专为Windows Server设计的自定义命令行工具,它扩展了操作系统默认的命令行功能,为管理员提供更高效、更便捷的服务器管理体验。MyShell_V1.2作为一个批处理脚本(.bat文件),可能是...
使用c语言完成了myshell模拟命令解释器,包含ls,pwd,cd,cat,time,date,cp,umane,tac,du,tail,echo,whoami,clear,输出重定向,管道命令等功能。
在Minix操作系统中,`myshell` 是一个用户级别的命令行解释器,它实现了基本的shell功能,允许用户与系统进行交互。`myshell` 的设计和实现涉及到多个关键知识点,包括命令解析、进程控制、输入输出重定向以及历史...
基本功能: 1.基本的内部命令。如:cd, ls, pwd 等; 2.能处理后台程序(不需要wait) 3.具有管道和重定向功能。如输入:who | wc -l 进行测试; 4.可以处理多条命令,以';'分隔, 滤掉无效的空格、tab符等;
本项目"Python即时语音克隆由MyShell.zip"提供了一个用Python实现的实时语音克隆解决方案,让我们深入了解这个过程涉及的关键知识点。 1. **Python编程语言**:Python是一种广泛用于数据处理、机器学习和AI开发的...
在"**Myshell**"项目中,开发人员选择C++作为实现语言,旨在构建一个轻量级的Shell,它可以处理基本的命令,如`mv`(移动或重命名文件)。 `MV`命令在Linux中用于移动文件或目录,或者重命名它们。在我们的C++实现中...
### 标题:“myshell (6)xin.txt” 该标题可能表明这是一系列Shell程序中的第六个版本,或者是一个实验性质的版本。“xin.txt”可能是作者用来保存代码或测试结果的文件名。 ### 描述:“C语言编写linux的命令” ...