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

Mat*_*rty 5 vb.net ssh ssh.net

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

这是我到目前为止:

Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("IP", "USERNAME", "PASSWORD")
Dim sshClient As New Renci.SshNet.SshClient(connInfo)
Dim cmd As Renci.SshNet.SshCommand

Private Sub MaterialFlatButton1_Click(sender As Object, e As EventArgs) Handles MaterialFlatButton1.Click
    Using sshClient
        sshClient.Connect()
        cmd = sshClient.RunCommand("reboot")
        sshClient.Disconnect()
    End Using
End Sub
Run Code Online (Sandbox Code Playgroud)

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

Renci.SshNet.dll中出现未处理的"Renci.SshNet.Common.SshConnectionException"类型异常

附加信息:已建立的连接已由主机中的软件中止.

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

Mar*_*nte 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
Run Code Online (Sandbox Code Playgroud)

重启ssh:

sudo service ssh stop
sudo service ssh start
Run Code Online (Sandbox Code Playgroud)

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

编辑文件(我在cygwin上使用ssh,其他客户端超出我的知识)

的〜/ .ssh /配置

添加行

KexAlgorithms +diffie-hellman-group1-sha1
Run Code Online (Sandbox Code Playgroud)

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


Kir*_*oll 5

我自己也遇到了同样的问题。tl;dr:升级到 SSH.NET 的测试版

Install-Package SSH.NET -Pre
Run Code Online (Sandbox Code Playgroud)

进一步阐述

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

grep 'sshd' /var/log/auth.log
Run Code Online (Sandbox Code Playgroud)

你可能会看到这样一行:

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

最近版本的 ssh 服务器变得更加严格,当前(稳定)版本的 SSH.NET 不支持这一点。更具体地说,它变得更加严格,要求密钥大小大于 1024。您可以在 codeplex 上查看错误报告。这一个遇到类似问题的人,升级对他来说也有效。