开源Granados介绍 - SSH连接远程Linux服务器(C#)

简介:
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协议连接。

如何使用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;

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;
    }

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);
            }


        }

    }

4.执行效果如下:


5.如果你需要快速的执行某些指定的命令,则可以把上面的
byte [] b  =   new   byte [ 1 ];
  
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);

希望当你在找一个SSH库时这篇文章对你有所帮助,谢谢!



本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2008/05/20/1203574.html,如需转载请自行联系原作者

目录
相关文章
W9
|
29天前
|
运维 关系型数据库 MySQL
轻松管理Linux服务器的5个优秀管理面板
Websoft9 应用管理平台,github 2k star 开源软件,既有200+的优秀开源软件商店,一键安装。又有可视化的Linux管理面板,文件、数据库、ssl证书方便快捷管理。
W9
85 1
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
20天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
28天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
28天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
1月前
|
安全 Linux API
Linux服务器安全
人们常误认为服务器因存于数据中心且数据持续使用而无需加密。然而,当驱动器需维修或处理时,加密显得尤为重要,以防止数据泄露。Linux虽有dm-crypt和LUKS等内置加密技术,但在集中管理、根卷加密及合规性等方面仍存不足。企业应选择具备强大验证、简单加密擦除及集中管理等功能的解决方案,以弥补这些缺口。
26 0
|
2天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
1天前
|
开发框架 缓存 .NET
阿里云轻量应用服务器、经济型e、通用算力型u1实例怎么选?区别及选择参考
在阿里云目前的活动中,价格比较优惠的云服务器有轻量应用服务器2核2G3M带宽68元1年,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年,这几个云服务器是用户关注度最高的。有的新手用户由于是初次使用阿里云服务器,对于轻量应用服务器、经济型e、通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍和对比,以供参考。
|
9天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
10天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。