无法使用SSH.NET连接到SSH服务器

时间:2016-06-02 22:27:48

标签: vb.net ssh ssh.net

我目前正在尝试使用Visual Basic和SSH.NET为我的Linux服务器制作类似控制面板的程序。现在,我想在按下按钮时重启Linux机器。

这是我到目前为止所做的:

bucket = session.Bucket(bucket_name)
bucket.upload_file(Key=s3_key, Filename=source_path)
os.remove(source_path)

当我按下按钮时,我得到的错误是:

未处理的类型' Renci.SshNet.Common.SshConnectionException'发生在Renci.SshNet.dll

其他信息:已建立的连接已被主机中的软件中止。

我的代码有什么需要改变的吗?

3 个答案:

答案 0 :(得分:7)

如果您是服务器管理员,可以选择将密钥交换算法限制为 diffie-hellman-group1-sha1 。重要的是要注意这个算法不再被认为是安全的,但Open SSH支持它。

为此,请转到您的Linux服务器并编辑文件

<强>的/ etc / SSH / sshd_config中

添加行(文件中间的某处)

# Disable all Kex Algorithms but the one defined below (so Renci SSH.NET 2013 works)
KexAlgorithms diffie-hellman-group1-sha1

重启ssh:

sudo service ssh stop
sudo service ssh start

现在SSH.NET可以工作,但是要通过ssh(终端)连接到服务器,你应该在你的客户端配置文件中定义协议:

编辑文件(我在cygwin上使用ssh,我不知道其他客户端)

<强>的〜/ .ssh /配置

添加行

KexAlgorithms +diffie-hellman-group1-sha1

总而言之,我最终没有使用此解决方案,因为最新的filezilla没有与服务器连接,我有一个用户使用它来上传文件。

答案 1 :(得分:4)

我自己遇到了同样的问题。 tl;博士:upgrade to the beta version of SSH.NET

Install-Package SSH.NET -Pre

进一步详述

如果在尝试连接失败后立即检查Linux服务器上的日志:

grep 'sshd' /var/log/auth.log

你可能会看到这样的一行:

  

sshd [2467]:致命:mm_answer_moduli:错误参数:2048 2048 1024

最近版本的ssh服务器变得更加严格,而且当前(稳定版)的SSH.NET不支持这一点。更具体地说,要求更大的密钥大小超过1024,它变得更加严格。您可以看到错误报告on codeplex。而here's遇到类似问题的人也可以升级。

答案 2 :(得分:0)

RunCommand方法需要来自连接设备的响应。运行reboot,poweroff或shutdown命令将不允许来自设备的响应并导致发生SshConnectionException。

我将此命令包装在try / catch中,因为此异常是预期的。这是C#中的一个例子:

try
{
    sshClient.RunCommand("reboot");
}
catch (SshConnectionException exception)
{
    // do something
}