sharpssh远程linux监控系统,利用SharpSsh远程执行linux的shell命令
利用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命令相关推荐
- 路灯远程无线监控系统
路灯远程无线监控系统,主要由前端杆体设备.通信控制终端.管理中心等组成,智慧路灯网关作为核心设备建立杆体控制器.摄像头.传感器等前端与管理系统的数据通道,实现数据实时采集.上传.远程监控.控制等功能, ...
- 全球与中国远程家庭监控系统市场深度研究分析报告
[报告篇幅]:99 [报告图表数]:135 [报告出版时间]:2022年1月 报告摘要 本文研究全球及中国市场远程家庭监控系统现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美.欧洲. ...
- 起重机三级远程ZigBee监控系统
0 引言 起重机是一种在一定范围内垂直升降重物的特殊工业设备,但是机械的过度使用及磨损容易造成安全事故,所以有必要对起重机的运行参数进行实时监控.技术人员可通过BrSWP%.SWP%.起重机运行时间等 ...
- 中小学、幼儿园远程视频监控系统技术方案
中小学.幼儿园远程视频监控系统技术方案 行业背景 近年来,随着我国教育事业的发展.高校扩招以及中小学合并等趋势,学校规模的扩张伴随着安全防范需求增大,科技的发展也推动着教学手段的更新,除了视频监控防范 ...
- 【解决方案】SkeyeVSS加油站远程视频监控系统建设标准及推广应用方案
加油站场所属于安全防范重点单位并且是一级防火单位,流动车辆多,人员来往复杂,稍有不慎,易燃易爆油品及作业过程中挥发的油气都可能因打火机.烟头.电气火花.静电等引起火灾.爆炸事故.为了提升人员管理效率, ...
- 服务器健康监控管理系统,一种远程健康监控系统服务器
主权项: 1.一种远程健康监控系统服务器,其特征在于,所述远程健康监控系统服务器主要包括以下六个功能模块:(1)socket通信模块,socket通信模块负责建立socket监听服务器端口,接收soc ...
- 基于JAVA服务器监控系统设计,远程数字图像监控系统中web服务器的设计与实现...
摘要: 数字图像监控系统在目前处于小规模发展阶段,系统的核心是监控服务器.在一些小规模的应用中,监控服务器同时还充当着监控终端的角色.但是,大部分监控系统都没有考虑用户权限.安全性.收费模式等方面的问 ...
- android 远程视频监控程序源码,详解基于Android已开放源代码的远程视频监控系统教程...
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.Socket的英文原义是"孔"或"插座".通常也称作"套接字 ...
- 基于JAVA的远程屏幕监控系统
摘 要 远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统.PC版QQ的远程演示功能等都属于远程屏幕监控系统.监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来 ...
最新文章
- 【Flutter】创建 Flutter 项目 ( Android Studio 创建并运行 Flutter 应用 | 命令行创建并运行 Flutter 应用 | 运行 Flutter 应用三种方式 )
- 遍历Map的几种方式以及性能小结
- parted分区介绍
- 有关ArrayList的toArray()方法的一些探究
- 使用ladash判断集合中是否有
- Python列表常用函数使用详解(内附详细案例)
- 今天开始写一些内容,留作备份。
- 如何新建Spring Boot工程
- About abstract class.
- MySQL left join right join inner join 区别
- 去摆摊吧,落魄的Java程序员
- 搜索引擎使用的10个技巧
- 怎么把线稿提取出来_用ps如何提取线稿图?简单教程轻松搞定
- 解决xp共享的批处理文件
- 研大考研不是骗子:考研政治时事之破除国企岗位
- 怎样快速实现整篇文档中英互译
- double和Double区别
- 走位神器大全排行榜,你们是什么级别的关羽哥?
- NDK 开发之 ndk-build 的使用
- android Facebook deeplink 坑坑坑
热门文章
- java中_null和“”的区别详解
- C语言+数据结构总结
- MFC新建文件夹、打开文件夹的实现方法
- linux 删除node进程,关于node.js:杀死Linux中的节点进程
- mysql怎么修改表中的文字_mysql表中怎么修改字段?
- SQL Server大量数据秒级插入/新增/删除
- IDEA查看源码时总是出现.class而不是.java源码(解决办法)
- Navicat中无法自定义标量值函数的问题
- 监控mysql数据库里的数据_有谁知道哪种软件可以监控mysql数据库上执行的数据脚本吗?...
- 飞车手游服务器维护,QQ飞车手游更新出现异常怎么办 更新异常原因及解决方法技巧...