【问题标题】:C# send a simple SSH commandC# 发送一个简单的 SSH 命令
【发布时间】:2012-06-23 12:12:14
【问题描述】:

我是一名年轻的学生,收到了本周的作业。这对我来说非常困难,因为我必须创建一个能够连接到 SSH 服务器并发送命令“etc/init.d/networking restart”的程序。

我应该用 C# 编写这个应用程序,而且我对它很陌生(刚刚从一些学校课程中学到了)。我还应该创建一个 GUI。

我了解 C# 的基础知识(循环、if 等...)。

我已经创建了 GUI、菜单、按钮和日志列表框。 GUI = 3 个文本框(ip、用户名、密码)和一个连接按钮。

我正在使用 Microsoft Visual Studio 进行编码。

我的问题是:如何与我的服务器建立 SSH 连接?

【问题讨论】:

  • 你见过this
  • 如果您分享您实际尝试过的内容,这对我们来说也将是惊人的......
  • 您好,感谢您的快速回答 JacobSeleznev 感谢您的网站。但我就是买不起这个产品。 @LolCoder 当然:​​D 我已经创建了一个 GUI Click Me 这是代码的图片(嗯^^)Click Me
  • @justinb138 感谢您的解决方案。我已经从下载页面下载了库。现在有个小问题:如何在我的程序中实现这个库?

标签: c# ssh


【解决方案1】:

我前段时间在一个项目中使用了SSH.Net,对此非常满意。它还附带一个很好的文档,其中包含许多关于如何使用它的示例。

仍然可以在here找到原始包的网站,包括文档(目前在 GitHub 上不可用)。

对于您的情况,代码将是这样的。

using (var client = new SshClient("hostnameOrIp", "username", "password"))
{
    client.Connect();
    client.RunCommand("etc/init.d/networking restart");
    client.Disconnect();
}

【讨论】:

  • 您在哪里找到了 SSH.NET 示例?谢谢
  • 它在他们的 codeplex 页面上的 Downnloads 下作为“SshNet 帮助”可用:sshnet.codeplex.com/releases/view/120565。这不是提供文档的最常见方式,但至少有。
  • @Karl-JohanSjögren,我已经下载了 SSH.NET,如果我想从 .net 调用这个特定的 Unix 文件 anly_load_int.sh.. RunCommand 会是什么样子..?
  • 嗯,取决于文件在目标机器上的位置,它应该类似于sh /path/to/anly_load_int.sh
  • @Karl-JohanSjögren,谢谢。对于其他人,如果您在查看 .chm 文件时看不到内容,请记住在文件管理器中单击它,然后在属性中勾选“取消阻止”复选框。
【解决方案2】:
SshClient cSSH = new SshClient("192.168.10.144", 22, "root", "pacaritambo");
cSSH.Connect();
SshCommand x = cSSH.RunCommand("exec \"/var/lib/asterisk/bin/retrieve_conf\"");
cSSH.Disconnect();
cSSH.Dispose();

//使用SSH.Net

【讨论】:

  • 这对我有用,因为我需要使用非默认端口。
  • 您实际上应该在第 1 行的开头放置一个 using。这样您就不必记住在第 5 行进行 Dispose 并且即使在发生防止内存泄漏的错误时也会进行 dispose。跨度>
【解决方案3】:

【讨论】:

  • 不支持多连接:(
  • Tamir SSH 已弃用。它使用旧的易于破解的协议。 SSH.net 是一种更新且更安全的解决方案。
【解决方案4】:

迟到的答案,但不幸的是,对我来说,没有一个解决方案有效。实际上,如果您需要执行多个命令,并且这些命令相互依赖(第一个命令修改了环境,例如后面的​​命令使用的变量),您必须在一个通道内执行它们。为此使用 shell 语法,例如 &&;

using (var client = new SshClient("hostnameOrIp", "username", "password"))
{
    client.Connect();

    using (var command = client.CreateCommand("command1 && command2"))
    {
        Console.Write(command.Execute()); //Don't forget to Execute the command
    }

    client.Disconnect();
}

【讨论】:

    【解决方案5】:

    对于 .Net 核心,我在使用 SSH.net 时遇到了很多问题,而且它也被弃用了。我尝试了其他一些库,甚至是其他编程语言。但我找到了一个很好的选择。 https://stackoverflow.com/a/64443701/8529170

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多