.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
79 件の質問
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
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;
}