【问题标题】:executing commands on unix server via visual basic application通过 Visual Basic 应用程序在 Unix 服务器上执行命令
【发布时间】:2016-11-03 22:06:32
【问题描述】:

我需要有关使用 Visual Basic 应用程序在 Unix 服务器上执行命令的帮助。我正在使用 Visual Basic Express 2010。

附:我可以使用systems.net.sockets 连接到服务器,但无法发送命令执行。

我愿意尝试任何不同的方法,我只需要知道如何做到这一点。

【问题讨论】:

  • 欢迎来到 StackOverflow。什么类型的连接?什么样的命令? “无法发送命令执行”究竟是什么意思?您需要编辑您的问题,更加具体,并发布您迄今为止尝试过的不适合您的代码。由于这是目前所写的,因此无法回答,因为您没有提供任何信息。 FAQ 提供了一些关于编写问题的建议,以提高您获得答案的机会。

标签: vb.net bash shell unix


【解决方案1】:

我可以想到两种方法来实现这一点:

  1. 在系统上安装一个像 Putty 这样的程序,并使用 Putty 对服务器(应用程序外部)进行 SSH 调用,并以这种方式发送您的命令。这将需要对您的应用程序进行一些提升的权限,因为它必须直接访问系统。在我看来,这是“丑陋”的做法。

  2. 查找 VB SSH 库。我找到了this one,但肯定还有更多。这将允许您创建到 Unix 机器的 SSH 连接并传递您要运行的命令。这将是“最好”的方式。

编辑:

它是 CSHARP 并不重要。您可以下载 Visual C# 2010 Express 并打开 Renci.SshNet 并构建它。构建完成后,您将获得一个 dll,然后您可以将其添加为对 VB 项目的引用。有点痛苦,但使用 Express 版本需要付出很小的代价。 :)

这是在 Visual C# 2010 Express 中打开并运行构建的 ssh 库的屏幕截图。您可以在左下角看到“构建成功”:

一旦您将其作为参考,您就可以使用该库与服务器建立 ssh 连接并运行您的命令。这是一些示例代码。我创建了一个 VB Web 应用程序,将 dll 添加为引用,并将单击事件添加到将结果吐出到标签控件的按钮中:

Protected Sub btnSSHTest_Click(sender As Object, e As EventArgs) Handles btnSSHTest.Click

    'Create the objects needed to make the connection'
    Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("hostname", "username", "password")
    Dim sshClient As New Renci.SshNet.SshClient(connInfo)

    'Need to hold the command'
    Dim cmd As Renci.SshNet.SshCommand


    Using sshClient
        'connect to the server'
        sshClient.Connect()

        'Run the command and put the results into the cmd object. In this case'
        'I am just running a directory list'
        cmd = sshClient.RunCommand("ls -lthr")

        'my web page had a label control on it. I placed the results of the cmd into'
        'the label'
        lblResult.Text = cmd.Result

        'Close the connection.'
        sshClient.Disconnect()
    End Using

End Sub

编辑:

为了确保它在非 Web 应用程序中工作,我在使用 Vb 2010 express 创建的 Windows 窗体应用程序中做了示例。我在表单中添加了一个按钮和一个标签,并将上面的代码添加到按钮单击事件中。然后我添加了对我从 C# 2010 Express 创建的 DLL(库)的引用。

这是添加引用的截图:

这是项目属性的屏幕截图,显示已添加参考:

接下来,我运行项目并单击按钮。与 unix 框的连接已建立,命令的结果(在本例中为“ls -lthr”)被放置在标签中。我以 root 身份登录(不推荐)并从 /root/ 目录运行命令。这就是为什么那里没有多少。

【讨论】:

  • 试过腻子,但它不值得,宁愿做一个宏。第二个虽然我不知道如何使用它;它是 csharp,我正在使用 Visual Basic。一个示例代码会有很长的路要走。谢谢
  • 只是一个想法,你能不能在你的服务器上有一个脚本来“监听”网络数据,并且当它接收到带有例如“a”的数据包时,它会执行与它相关的某个命令?它可能必须有另一个脚本;这不是我的专业领域,但这只是一个想法。如果您没有 10 个永远不会改变的命令,这将不起作用。只是一个想法。
  • alex 这行得通,但仍然有几个小问题。我如何用这个发送回车键?我的标签没有显示任何内容,这是否意味着命令没有结果
  • 现在你必须分享一些代码。你能发布你的版本吗?只要你的潜艇就行了。
  • 这不起作用。我正在调用 atom 命令,然后是 mgrfake,然后它会询问我在经理中给 ti m 的选项。那么 26 是命令号,03 是属性。
猜你喜欢
  • 2012-11-20
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多