c#调用sharpssh连接linux的问题

dddsdfsd1 2016-08-31 09:06:46
最近写了个小程序,通过c#连接linux执行一些语句,对输出做一些处理,是通过调用sharpssh实现的,发现几个问题,首先sharpssh连接linux是固定使用22端口的,这个好办,改下sharpssh源码,就可以支持自定义端口,不过我又发现新问题,就是有些linux可以连接,但有些linux连接会报“Algorithm negotiation fail”错误,连接报错的机器都安装了新版的OpenSSH,网上查到的原因是SharpSSH使用diffie-hellman-group1-sha1和diffie-hellman-group-exchange-sha1密钥交换算法,而OpenSSH在6.7p1版本之后默认不再采用以上算法,需要手工添加。

在/etc/sshd_config中添加:
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc
MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256
之后重启sshd服务。

按照以上步骤修改后,确实通过sharpssh可以连接linux,但有一定安全隐患,sharpssh好像2013年以后就没人维护了,请问有没有不修改ssh配置就可以让sharpssh连接安装新版OpenSSH的linux系统的方法,本人刚刚开始学c#,水平有限,复杂的修改就搞不定了,有没有高手可以修改下sharpssh源代码,可以支持新版OpenSSH,或者有其他更好的工具推荐也可以,不胜感激。
...全文
888 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofrandom 2018-12-13
  • 打赏
  • 举报
回复
引用 6 楼 duckkeeper 的回复:
楼主你好,我也是最近刚接手sharpSSH的小白,现在遇到一些问题想请教一下你,如能解答,不胜感激!
项目背景如下:通过.net自动连接linux服务器,自动执行命令,然后拿到控制台回显保存到文件方便与预期结果作对比(跟你描述的场景很相似)。
我的做法:用SshStream ssh = new SshStream(ip, root, pass);远程到linux以后,通过ssh.Write("show glid");执行预期的命令,再通过string response = ssh.ReadResponse();拿到回显。
目前的障碍是:
1、执行命令有延时,在不加Thread.Sleep(5000);的情况下,执行完命令立即用ssh.ReadResponse()拿回显很多时候都为空(偶尔能成功拿到);
2、回显显示不完全,这种方式拿到的回显跟自己在linux输入命令拿到的回显明显少很多行;
所以我怀疑这种拿回显的方式有问题,我在网上也看了很多,发现有好几种拿回显的方式,但是在我这里就这种方式能偶尔成功,不知道楼主是怎么拿到控制台回显的?
层主你好!我也是用的你这个方法,但是在执行SshStream ssh = new SshStream(ip, root, pass);就会遇到algorithm negotiation fail的错误,望指教
流萤 2017-12-07
  • 打赏
  • 举报
回复
引用 6 楼 duckkeeper 的回复:
楼主你好,我也是最近刚接手sharpSSH的小白,现在遇到一些问题想请教一下你,如能解答,不胜感激! 项目背景如下:通过.net自动连接linux服务器,自动执行命令,然后拿到控制台回显保存到文件方便与预期结果作对比(跟你描述的场景很相似)。 我的做法:用SshStream ssh = new SshStream(ip, root, pass);远程到linux以后,通过ssh.Write("show glid");执行预期的命令,再通过string response = ssh.ReadResponse();拿到回显。 目前的障碍是: 1、执行命令有延时,在不加Thread.Sleep(5000);的情况下,执行完命令立即用ssh.ReadResponse()拿回显很多时候都为空(偶尔能成功拿到); 2、回显显示不完全,这种方式拿到的回显跟自己在linux输入命令拿到的回显明显少很多行; 所以我怀疑这种拿回显的方式有问题,我在网上也看了很多,发现有好几种拿回显的方式,但是在我这里就这种方式能偶尔成功,不知道楼主是怎么拿到控制台回显的?
同样的问题,有时还会存在问号
duckkeeper 2016-09-05
  • 打赏
  • 举报
回复
楼主你好,我也是最近刚接手sharpSSH的小白,现在遇到一些问题想请教一下你,如能解答,不胜感激! 项目背景如下:通过.net自动连接linux服务器,自动执行命令,然后拿到控制台回显保存到文件方便与预期结果作对比(跟你描述的场景很相似)。 我的做法:用SshStream ssh = new SshStream(ip, root, pass);远程到linux以后,通过ssh.Write("show glid");执行预期的命令,再通过string response = ssh.ReadResponse();拿到回显。 目前的障碍是: 1、执行命令有延时,在不加Thread.Sleep(5000);的情况下,执行完命令立即用ssh.ReadResponse()拿回显很多时候都为空(偶尔能成功拿到); 2、回显显示不完全,这种方式拿到的回显跟自己在linux输入命令拿到的回显明显少很多行; 所以我怀疑这种拿回显的方式有问题,我在网上也看了很多,发现有好几种拿回显的方式,但是在我这里就这种方式能偶尔成功,不知道楼主是怎么拿到控制台回显的?
dddsdfsd1 2016-09-03
  • 打赏
  • 举报
回复
试了一下,好用,支持新的加密算法,传文件执行命令都可以,非常感谢shingoscar。
dddsdfsd1 2016-09-01
  • 打赏
  • 举报
回复
顶一下,别沉了
dddsdfsd1 2016-09-01
  • 打赏
  • 举报
回复
引用 3 楼 shingoscar 的回复:
这有个今年还在更新的 http://sshnet.codeplex.com/
非常感谢,我去看下。
Poopaye 2016-09-01
  • 打赏
  • 举报
回复
这有个今年还在更新的 http://sshnet.codeplex.com/
dddsdfsd1 2016-09-01
  • 打赏
  • 举报
回复
再顶下。。。。。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧