2

Visual Basic アプリケーションを使用して Unix サーバー上でコマンドを実行する方法についてサポートが必要です。Visual Basic Express 2010 を使用しています。

PSを使用してサーバーに接続できsystems.net.socketsますが、実行するコマンドを送信できません。

私は別のアプローチを試すことにオープンです。これを行う方法を知る必要があるだけです。

4

1 に答える 1

7

これを実現するには、次の 2 つの方法が考えられます。

  1. Putty のようなプログラムをシステムにインストールし、Putty を使用して (アプリの外部で) サーバーに SSH 呼び出しを行い、この方法でコマンドを送信します。これには、システムに直接アクセスする必要があるため、アプリに対する昇格された権限が必要になります。私の意見では、これはこれを行うための「醜い」方法です。

  2. VB SSH ライブラリを見つけます。私はこれを見つけましたが、もっとあるはずです。これにより、Unix ボックスへの SSH 接続を作成し、実行したいコマンドを渡すことができます。これが「最善」の方法です。

編集:

それが CSHARP であることは問題ではありません。Visual C# 2010 Express をダウンロードし、Renci.SshNet を開いてビルドできます。ビルドが完了すると、VB プロジェクトへの参照として追加できる dll が得られます。少し面倒ですが、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 に答える