利用SharpSsh远程执行linux的shell命令 (2011-07-26 14:38:02)

SharpSSH是一个C#的开源项目,可以利用SSH连接linux系统。并执行shell等命令。

而SharpSSH提供的例子的输入输出都是定向到console。因此不容易从其中取出它的结果。

因此需要对源码进行一定的修改,从而得到我们想要的结果。

执行SSH前,应确保linux主机上的服务已启动,命令:service sshdstart

引用工程:SharpSSH

源代码:

static voidMain(string[]args)

{

try

{

//Create a new JSch instance

JSch jsch = newJSch();

//Prompt for username and serverhost

Console.WriteLine("Please input hostname:");

String host = Console.ReadLine();

Console.WriteLine("Please input username:");

String user = Console.ReadLine();

Console.WriteLine("Please input password:");

String pwd = Console.ReadLine();

//Create a new SSH session

Session session = jsch.getSession(user, host,22);

// username and password will be givenvia UserInfo interface.

UserInfo ui = newShellUserInfo();

ui.setPassword(pwd);

session.setUserInfo(ui);

//Connect to remote SSHserver

session.connect();

//Open a new Shell channel on the SSHsession

Channel channel = session.openChannel("shell");

//Redirect standard I/O to the SSHchannel

channel.setInputStream(Console.OpenStandardInput());

channel.setOutputStream(Console.OpenStandardOutput());

//Connect the channel

channel.connect();

Console.WriteLine("-- Shell channel is connected using the {0}cipher", session.getCipher());

//Wait till channel is closed

while(!channel.isClosed())

{

System.Threading.Thread.Sleep(500);

}

//Disconnect from remoteserver

channel.disconnect();

session.disconnect();

}

catch (Exception e)

{

Console.WriteLine(e);

}

}

以上只能将输入输出定向到console。

修改:打开SharpSSH中的SshStream.cs,加一个方法

public voidset_OutputStream(Streamstream){m_channel.setOutputStream(stream);}

接下来封装一个类:

class ShellHelp

{

System.IO.MemoryStreamoutputstream = newMemoryStream();

Tamir.SharpSsh.SshStream inputstream = null;

Channel channel = null;

Session session = null;

///

/// 命令等待标识

///

string waitMark = "]#";

///

/// 打开连接

///

///

///

///

///

public bool OpenShell(string host, string username, string pwd)

{

try

{

Redirect standard I/O to the SSHchannel

inputstream = newTamir.SharpSsh.SshStream(host, username, pwd);

///我手动加进去的方法。。为了读取输出信息

inputstream.set_OutputStream(outputstream);

return inputstream != null;

}

catch{throw;}

}

///

/// 执行命令

///

///

public bool Shell(string cmd)

{

if (inputstream == null) returnfalse;

string initinfo =GetAllString();

inputstream.Write(cmd);

inputstream.Flush();

string currentinfo =GetAllString();

while (currentinfo ==initinfo)

{

System.Threading.Thread.Sleep(100);

currentinfo = GetAllString();

}

return true;

}

///

/// 获取输出信息

///

///

public string GetAllString()

{

string outinfo = Encoding.UTF8.GetString(outputstream.ToArray());

//等待命令结束字符

while(!outinfo.Trim().EndsWith(waitMark))

{

System.Threading.Thread.Sleep(200);

outinfo = Encoding.UTF8.GetString(outputstream.ToArray());

}

outputstream.Flush();

returnoutinfo.ToString();

}

///

/// 关闭连接

///

public void Close()

{

if (inputstream != null) inputstream.Close();

}

}

注意:string waitMark = "]#"; 在这里是用来标识命令是否执行完成的,,执行完成就会在后面输出这个字符,,有时也有可能是"]$"

接下来执行shell命令:

static voidMain(string[] args)

{

Console.WriteLine("Please input hostname:");

String host = Console.ReadLine();

Console.WriteLine("Please input username:");

String user = Console.ReadLine();

Console.WriteLine("Please input password:");

String pwd = Console.ReadLine();

ShellHelp shell = newShellHelp();

//连接linux成功

if (shell.OpenShell(host, user,pwd))

{

shell.Shell("df-h");//执行获取命令

//shell.Shell("dmidecode");//执行获取命令

string info =shell.GetAllString();//获取返回结果

Console.WriteLine(info);

shell.Close();//关闭连接

}

Console.ReadLine();

}

转自:http://blog.sina.com.cn/s/blog_6ffbfc880100tt85.html

sharpssh远程linux监控系统,利用SharpSsh远程执行linux的shell命令相关推荐

  1. 路灯远程无线监控系统

    路灯远程无线监控系统,主要由前端杆体设备.通信控制终端.管理中心等组成,智慧路灯网关作为核心设备建立杆体控制器.摄像头.传感器等前端与管理系统的数据通道,实现数据实时采集.上传.远程监控.控制等功能, ...

  2. 全球与中国远程家庭监控系统市场深度研究分析报告

    [报告篇幅]:99 [报告图表数]:135 [报告出版时间]:2022年1月 报告摘要 本文研究全球及中国市场远程家庭监控系统现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美.欧洲. ...

  3. 起重机三级远程ZigBee监控系统

    0 引言 起重机是一种在一定范围内垂直升降重物的特殊工业设备,但是机械的过度使用及磨损容易造成安全事故,所以有必要对起重机的运行参数进行实时监控.技术人员可通过BrSWP%.SWP%.起重机运行时间等 ...

  4. 中小学、幼儿园远程视频监控系统技术方案

    中小学.幼儿园远程视频监控系统技术方案 行业背景 近年来,随着我国教育事业的发展.高校扩招以及中小学合并等趋势,学校规模的扩张伴随着安全防范需求增大,科技的发展也推动着教学手段的更新,除了视频监控防范 ...

  5. 【解决方案】SkeyeVSS加油站远程视频监控系统建设标准及推广应用方案

    加油站场所属于安全防范重点单位并且是一级防火单位,流动车辆多,人员来往复杂,稍有不慎,易燃易爆油品及作业过程中挥发的油气都可能因打火机.烟头.电气火花.静电等引起火灾.爆炸事故.为了提升人员管理效率, ...

  6. 服务器健康监控管理系统,一种远程健康监控系统服务器

    主权项: 1.一种远程健康监控系统服务器,其特征在于,所述远程健康监控系统服务器主要包括以下六个功能模块:(1)socket通信模块,socket通信模块负责建立socket监听服务器端口,接收soc ...

  7. 基于JAVA服务器监控系统设计,远程数字图像监控系统中web服务器的设计与实现...

    摘要: 数字图像监控系统在目前处于小规模发展阶段,系统的核心是监控服务器.在一些小规模的应用中,监控服务器同时还充当着监控终端的角色.但是,大部分监控系统都没有考虑用户权限.安全性.收费模式等方面的问 ...

  8. android 远程视频监控程序源码,详解基于Android已开放源代码的远程视频监控系统教程...

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.Socket的英文原义是"孔"或"插座".通常也称作"套接字 ...

  9. 基于JAVA的远程屏幕监控系统

    摘 要 远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统.PC版QQ的远程演示功能等都属于远程屏幕监控系统.监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来 ...

最新文章

  1. 【Flutter】创建 Flutter 项目 ( Android Studio 创建并运行 Flutter 应用 | 命令行创建并运行 Flutter 应用 | 运行 Flutter 应用三种方式 )
  2. 遍历Map的几种方式以及性能小结
  3. parted分区介绍
  4. 有关ArrayList的toArray()方法的一些探究
  5. 使用ladash判断集合中是否有
  6. Python列表常用函数使用详解(内附详细案例)
  7. 今天开始写一些内容,留作备份。
  8. 如何新建Spring Boot工程
  9. About abstract class.
  10. MySQL left join right join inner join 区别
  11. 去摆摊吧,落魄的Java程序员
  12. 搜索引擎使用的10个技巧
  13. 怎么把线稿提取出来_用ps如何提取线稿图?简单教程轻松搞定
  14. 解决xp共享的批处理文件
  15. 研大考研不是骗子:考研政治时事之破除国企岗位
  16. 怎样快速实现整篇文档中英互译
  17. double和Double区别
  18. 走位神器大全排行榜,你们是什么级别的关羽哥?
  19. NDK 开发之 ndk-build 的使用
  20. android Facebook deeplink 坑坑坑

热门文章

  1. java中_null和“”的区别详解
  2. C语言+数据结构总结
  3. MFC新建文件夹、打开文件夹的实现方法
  4. linux 删除node进程,关于node.js:杀死Linux中的节点进程
  5. mysql怎么修改表中的文字_mysql表中怎么修改字段?
  6. SQL Server大量数据秒级插入/新增/删除
  7. IDEA查看源码时总是出现.class而不是.java源码(解决办法)
  8. Navicat中无法自定义标量值函数的问题
  9. 监控mysql数据库里的数据_有谁知道哪种软件可以监控mysql数据库上执行的数据脚本吗?...
  10. 飞车手游服务器维护,QQ飞车手游更新出现异常怎么办 更新异常原因及解决方法技巧...