2

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

PS我可以使用连接到服务器systems.net.sockets但不能发送命令来执行。

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

4

1 回答 1

7

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

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

  2. 找到一个 VB SSH 库。我找到了这个,但必须有更多。这将允许您创建到 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/ 目录运行命令。这就是为什么那里没有多少。 应用程序运行

于 2013-01-21T18:46:05.937 回答