转 开源Granados介绍 - SSH连接远程Linux服务器(C#)
来源:互联网 发布:js工作流插件 编辑:程序博客网 时间:2024/04/29 19:35
Granados是一个基于.NET的SSH客户端库。它有以下特点:
1.Granados是一个C#的开源项目。源码地址:http://www.routrek.co.jp/support/download/varaterm/granados200.tar.gz
2.同时支持SSH1和SSH2。
3.Granados实现了AES, Blowfish, TripleDES, RSA, DSA等加密验证算法。
4.实现TCP协议连接。
1.工程中添加Routrek.granados.dll(下载的包里有)的引用。
2.添加Reader类,实现ISSHConnectionEventReceiver和ISSHChannelEventReceiver接口。首先引用命名空间:
Reader类实现如下:
3.好的,现在来测试一下:
4.执行效果如下:
5.如果你需要快速的执行某些指定的命令,则可以把上面的
替换为:
希望当你在找一个SSH库时这篇文章对你有所帮助,谢谢!
1.Granados是一个C#的开源项目。源码地址:http://www.routrek.co.jp/support/download/varaterm/granados200.tar.gz
2.同时支持SSH1和SSH2。
3.Granados实现了AES, Blowfish, TripleDES, RSA, DSA等加密验证算法。
4.实现TCP协议连接。
如何使用Granados库
可惜的是Granados的文档几乎没有!所以只有从它的源码找到它的测试代码来看。总结步骤为:1.工程中添加Routrek.granados.dll(下载的包里有)的引用。
2.添加Reader类,实现ISSHConnectionEventReceiver和ISSHChannelEventReceiver接口。首先引用命名空间:
using System.Threading;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using Routrek.Crypto;
using Routrek.SSHC;
using Routrek.SSHCV1;
using Routrek.SSHCV2;
using Routrek.Toolkit;
using Routrek.PKI;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using Routrek.Crypto;
using Routrek.SSHC;
using Routrek.SSHCV1;
using Routrek.SSHCV2;
using Routrek.Toolkit;
using Routrek.PKI;
Reader类实现如下:
class Reader : ISSHConnectionEventReceiver, ISSHChannelEventReceiver
{
public SSHConnection _conn;
public bool _ready;
public void OnData(byte[] data, int offset, int length)
{
System.Console.Write(Encoding.ASCII.GetString(data, offset, length));
}
public void OnDebugMessage(bool always_display, byte[] data)
{
Debug.WriteLine("DEBUG: " + Encoding.ASCII.GetString(data));
}
public void OnIgnoreMessage(byte[] data)
{
Debug.WriteLine("Ignore: " + Encoding.ASCII.GetString(data));
}
public void OnAuthenticationPrompt(string[] msg)
{
Debug.WriteLine("Auth Prompt " + msg[0]);
}
public void OnError(Exception error, string msg)
{
Debug.WriteLine("ERROR: " + msg);
}
public void OnChannelClosed()
{
Debug.WriteLine("Channel closed");
_conn.Disconnect("");
//_conn.AsyncReceive(this);
}
public void OnChannelEOF()
{
_pf.Close();
Debug.WriteLine("Channel EOF");
}
public void OnExtendedData(int type, byte[] data)
{
Debug.WriteLine("EXTENDED DATA");
}
public void OnConnectionClosed()
{
Debug.WriteLine("Connection closed");
}
public void OnUnknownMessage(byte type, byte[] data)
{
Debug.WriteLine("Unknown Message " + type);
}
public void OnChannelReady()
{
_ready = true;
}
public void OnChannelError(Exception error, string msg)
{
Debug.WriteLine("Channel ERROR: " + msg);
}
public void OnMiscPacket(byte type, byte[] data, int offset, int length)
{
}
public PortForwardingCheckResult CheckPortForwardingRequest(string host, int port, string originator_host, int originator_port)
{
PortForwardingCheckResult r = new PortForwardingCheckResult();
r.allowed = true;
r.channel = this;
return r;
}
public void EstablishPortforwarding(ISSHChannelEventReceiver rec, SSHChannel channel)
{
_pf = channel;
}
public SSHChannel _pf;
}
{
public SSHConnection _conn;
public bool _ready;
public void OnData(byte[] data, int offset, int length)
{
System.Console.Write(Encoding.ASCII.GetString(data, offset, length));
}
public void OnDebugMessage(bool always_display, byte[] data)
{
Debug.WriteLine("DEBUG: " + Encoding.ASCII.GetString(data));
}
public void OnIgnoreMessage(byte[] data)
{
Debug.WriteLine("Ignore: " + Encoding.ASCII.GetString(data));
}
public void OnAuthenticationPrompt(string[] msg)
{
Debug.WriteLine("Auth Prompt " + msg[0]);
}
public void OnError(Exception error, string msg)
{
Debug.WriteLine("ERROR: " + msg);
}
public void OnChannelClosed()
{
Debug.WriteLine("Channel closed");
_conn.Disconnect("");
//_conn.AsyncReceive(this);
}
public void OnChannelEOF()
{
_pf.Close();
Debug.WriteLine("Channel EOF");
}
public void OnExtendedData(int type, byte[] data)
{
Debug.WriteLine("EXTENDED DATA");
}
public void OnConnectionClosed()
{
Debug.WriteLine("Connection closed");
}
public void OnUnknownMessage(byte type, byte[] data)
{
Debug.WriteLine("Unknown Message " + type);
}
public void OnChannelReady()
{
_ready = true;
}
public void OnChannelError(Exception error, string msg)
{
Debug.WriteLine("Channel ERROR: " + msg);
}
public void OnMiscPacket(byte type, byte[] data, int offset, int length)
{
}
public PortForwardingCheckResult CheckPortForwardingRequest(string host, int port, string originator_host, int originator_port)
{
PortForwardingCheckResult r = new PortForwardingCheckResult();
r.allowed = true;
r.channel = this;
return r;
}
public void EstablishPortforwarding(ISSHChannelEventReceiver rec, SSHChannel channel)
{
_pf = channel;
}
public SSHChannel _pf;
}
3.好的,现在来测试一下:
class Program
{
private static SSHConnection _conn;
static void Main(string[] args)
{
SSHConnectionParameter f = new SSHConnectionParameter();
f.UserName = "root";
f.Password = "****";
f.Protocol = SSHProtocol.SSH2;
f.AuthenticationType = AuthenticationType.Password;
f.WindowSize = 0x1000;
Reader reader = new Reader();
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(new IPEndPoint(IPAddress.Parse("192.168.x.x"), 22));
_conn = SSHConnection.Connect(f, reader, s);
reader._conn = _conn;
SSHChannel ch = _conn.OpenShell(reader);
reader._pf = ch;
SSHConnectionInfo ci = _conn.ConnectionInfo;
Thread.Sleep(1000);
byte[] b = new byte[1];
while (true)
{
int input = System.Console.Read();
b[0] = (byte)input;
reader._pf.Transmit(b);
}
}
}
{
private static SSHConnection _conn;
static void Main(string[] args)
{
SSHConnectionParameter f = new SSHConnectionParameter();
f.UserName = "root";
f.Password = "****";
f.Protocol = SSHProtocol.SSH2;
f.AuthenticationType = AuthenticationType.Password;
f.WindowSize = 0x1000;
Reader reader = new Reader();
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(new IPEndPoint(IPAddress.Parse("192.168.x.x"), 22));
_conn = SSHConnection.Connect(f, reader, s);
reader._conn = _conn;
SSHChannel ch = _conn.OpenShell(reader);
reader._pf = ch;
SSHConnectionInfo ci = _conn.ConnectionInfo;
Thread.Sleep(1000);
byte[] b = new byte[1];
while (true)
{
int input = System.Console.Read();
b[0] = (byte)input;
reader._pf.Transmit(b);
}
}
}
4.执行效果如下:
5.如果你需要快速的执行某些指定的命令,则可以把上面的
byte[] b = new byte[1];
while (true)
{
int input = System.Console.Read();
b[0] = (byte)input;
reader._pf.Transmit(b);
}
while (true)
{
int input = System.Console.Read();
b[0] = (byte)input;
reader._pf.Transmit(b);
}
替换为:
string cmd = "vi xxx.txt/n";
byte[] data = (new UnicodeEncoding()).GetBytes(cmd);
reader._pf.Transmit(data);
byte[] data = (new UnicodeEncoding()).GetBytes(cmd);
reader._pf.Transmit(data);
希望当你在找一个SSH库时这篇文章对你有所帮助,谢谢!
- 转 开源Granados介绍 - SSH连接远程Linux服务器(C#)
- 开源Granados介绍 - SSH连接远程Linux服务器(C#)
- SSH连接远程Linux服务器(C#)
- SSH连接远程Linux服务器(C#)
- SSH连接远程Linux服务器(C#)
- linux 下 ssh客户端 连接远程服务器
- linux通过putty,SSH连接远程服务器
- linux ssh 远程连接服务器常用操作
- Mac 通过 SSH 远程连接Linux服务器
- SSH 远程连接服务器
- SSH远程连接服务器
- SSH连接远程服务器
- 使用ssh远程连接Linux服务器开启ssh命令
- 简单介绍使用 ssh 连接远程服务器运行图形界面程序
- SSH远程连接LINUX
- 用本地linux通过ssh连接远程服务器
- 在MAC下如何用SSH连接远程LINUX服务器
- SSH连接远程服务器(Linux-Centos)以及出现问题解决
- 线程的基本概念,线程的基本状态?
- iBatis缓存的使用方法及解释
- SSl与SSh的区别
- 线程进入等待状态有几种方式?
- StringBuffer 与 StringBuilder的区别?
- 转 开源Granados介绍 - SSH连接远程Linux服务器(C#)
- 把一个数组的组合全部列出
- 求出现最多的字符及次数
- VI用法
- 取半个汉字
- 什么是 Reflection ?其他语言有这种特点吗?
- arm 对数据表和指令表的访问
- 在定义反射时,JAVA编码语言怎么样保证安全性?
- DOTA感悟