`

MyShell

    博客分类:
  • Java
 
阅读更多
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_实现一个简易的myshell_

    在本项目中,我们关注的是“myshell”的实现,这是一个简化版的shell程序,具有基本的命令处理能力,例如改变工作目录(cd命令)。我们将探讨如何构建这样一个程序,并了解它涉及到的关键知识点。 首先,我们要理解...

    myshell命令解释器

    "myshell命令解释器"是一个操作系统级别的作业,它是一个自定义的命令行接口,用于接收用户输入的命令并执行相应的操作。在这个项目中,我们将会深入理解操作系统如何处理用户输入的命令,以及如何构建一个简单的...

    MyShell精简的远程控制

    【标题】:“MyShell精简的远程控制” 在IT领域,远程控制技术是网络通信中的一个重要组成部分,它允许用户在一个设备上操作并控制另一个设备,通常通过网络进行。"MyShell精简的远程控制"是一个专为此目的设计的...

    myshell_for_linux

    《深入理解Linux Shell脚本:myshell实践解析》 在Linux操作系统中,Shell是一个至关重要的工具,它作为用户与系统内核之间的接口,允许用户通过命令行与系统进行交互。"myshell_for_linux"项目正是一个简易版的...

    【原创】【源代码】myshell:操作系统编程-自己用C语言写的Linux下的Shell

    The shell environment should contain shell=&lt;pathname&gt;/myshell where &lt;pathname&gt;/myshell is the full path for the shell executable (not a hardwired path back to your directory, but the one from which it...

    myshell_北理工操作系统实验六_

    "myshell_北理工操作系统实验六_" 是一个针对北京理工大学操作系统课程设计的实验项目,其目标是让学生亲手实现一个简单的Shell命令解析器,从而深入理解操作系统中的进程管理、输入/输出控制以及命令解析等核心概念...

    Linux_myshell

    【Linux_myshell】是一个专为Linux系统设计的C语言实现的命令行接口,它扩展了标准的bash shell功能,提供了更多的实用工具。这个shell程序旨在让用户在操作Linux系统时拥有更加便捷的交互体验,同时也为学习Linux...

    myshell操作系统

    ### myshell操作系统 #### 概述 在Ubuntu环境下编写的`myshell`是一个简单的命令行解释器或Shell程序,它实现了基本的输入输出重定向(通过`和`&gt;`符号)以及管道功能(通过`|`符号)。该Shell允许用户执行一系列...

    具体源代码myshell.c

    设计简单的命令行myshell,并能在实验环境下运行。 要求支持的命令如下: 1. cd [directory] 将当前目录改为 [directory] 2. environ 列出所有环境变量 3. ls 列出指定目录下所有文件 4. help 显示所有支持的命令 5....

    《操作系统——精髓和设计原理》myshell

    《操作系统——精髓和设计原理》中的项目myshell,并不是我自己写的,里面有很详尽的解释,这个shell的纠错能里能强大。 i.cd &lt;directory&gt; - change the current default directory to &lt;directory&gt;. If the ...

    MyShell.zip

    总之,"MyShell.zip"提供的源码为开发者提供了一个探索和学习shell编程的机会,无论是为了提升个人技能,还是为了创建独特的用户交互体验,都具有很高的价值。如果你对操作系统原理、shell编程或者想要打造自己的...

    MyShell_V1.2

    【标题】"MyShell_V1.2" 是一个专为Windows Server设计的自定义命令行工具,它扩展了操作系统默认的命令行功能,为管理员提供更高效、更便捷的服务器管理体验。MyShell_V1.2作为一个批处理脚本(.bat文件),可能是...

    模拟命令解释器MyShell的设计与实现

    使用c语言完成了myshell模拟命令解释器,包含ls,pwd,cd,cat,time,date,cp,umane,tac,du,tail,echo,whoami,clear,输出重定向,管道命令等功能。

    myshell_history_shell_minix_

    在Minix操作系统中,`myshell` 是一个用户级别的命令行解释器,它实现了基本的shell功能,允许用户与系统进行交互。`myshell` 的设计和实现涉及到多个关键知识点,包括命令解析、进程控制、输入输出重定向以及历史...

    C语言实现:Linux下的myshell

    基本功能: 1.基本的内部命令。如:cd, ls, pwd 等; 2.能处理后台程序(不需要wait) 3.具有管道和重定向功能。如输入:who | wc -l 进行测试; 4.可以处理多条命令,以';'分隔, 滤掉无效的空格、tab符等;

    Python_即时语音克隆由MyShell.zip

    本项目"Python即时语音克隆由MyShell.zip"提供了一个用Python实现的实时语音克隆解决方案,让我们深入了解这个过程涉及的关键知识点。 1. **Python编程语言**:Python是一种广泛用于数据处理、机器学习和AI开发的...

    Myshell.7z

    在"**Myshell**"项目中,开发人员选择C++作为实现语言,旨在构建一个轻量级的Shell,它可以处理基本的命令,如`mv`(移动或重命名文件)。 `MV`命令在Linux中用于移动文件或目录,或者重命名它们。在我们的C++实现中...

    myshell (6)xin.txt

    ### 标题:“myshell (6)xin.txt” 该标题可能表明这是一系列Shell程序中的第六个版本,或者是一个实验性质的版本。“xin.txt”可能是作者用来保存代码或测试结果的文件名。 ### 描述:“C语言编写linux的命令” ...

Global site tag (gtag.js) - Google Analytics