neon.ssh.netを使用してssh接続を行いsudoコマンドを実行するとパスワードプロンプトが表示されない

まつもと 0 評価のポイント
2025-03-07T07:05:14.8466667+00:00

LinuxベースのOSにneon.ssh.netを使用してssh接続を行いsudoコマンドを実行するとパスワードプロンプトが表示されなく困っています。具体的にはソースのパスワードプロンプトを待つshellStream.Expectが返ってこない状況です。

shellstream.expectのところをstreamreader.readlineに変更してもいつまでたってもパスワードプロンプトが表示されません。

どなたか解決方法をご存じの方はいらっしゃらないでしょうか。

【環境】

.net frameworkのバージョン:4.8

開発言語:C#

クライアントのバージョン:Windows11

ssh先のOS:DSM 7.1.1-42962 Update 6

ソースは以下になります。

【ソース】

private void button1_Click(object sender, EventArgs e)

{

this.textBox1.Text = "";

try

{

    using (SshClient sshClient = new SshClient("hostname", 22, "username", "password"))

    {

        sshClient.Connect();

        if (!sshClient.IsConnected)

        {

            this.textBox1.Text = "接続に失敗しました\r\n";

            return;

        }

        this.textBox1.Text = "接続しました\r\n";

        var modes = new Dictionary<Renci.SshNet.Common.TerminalModes, uint>();

        ShellStream shellStream = sshClient.CreateShellStream("xterm", 80, 24, 800, 600, 1024, modes);

        var promptRegex = new Regex(@"\][#$>]");

        using (var streamReader = new StreamReader(shellStream))

        {

            // コマンドプロンプトを待つ

            this.textBox1.Text += "コマンドプロンプトを待つ\r\n";

            promptRegex = new Regex(@"([$#>$])");

            var output = shellStream.Expect(promptRegex);

            // コマンド送信

            this.textBox1.Text += "コマンド送信\r\n";

            shellStream.WriteLine("sudo -S -p \"\" smbstatus ^| grep " + this.textBox2.Text.Trim());

            // パスワードプロンプトを待つ

            this.textBox1.Text += "パスワードプロンプトを待つ\r\n";

            promptRegex = new Regex(@"([$#>:])");

            output = shellStream.Expect(promptRegex);          ← ここが返ってこない

            // パスワード送信

            this.textBox1.Text += "パスワード送信\r\n";

            shellStream.WriteLine("pasword");

        }

        sshClient.Disconnect();

        this.textBox1.Text += "切断しました\r\n";

    }

}

catch (Exception)

{

    throw;

}
.NET
.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
79 件の質問
{count} 件の投票

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。