Linux with SSH.NET :“抱歉,你必须有一个 tty 才能 运行 sudo”
Linux with SSH.NET : “sorry, you must have a tty to run sudo”
我正在使用 Renci.SshNet 并且远程 Linux 服务器以某种方式知道我没有使用终端仿真器连接。所以:
using Renci.SshNet;
var connectionInfo = new ConnectionInfo("host","username", new PasswordAuthenticationMethod("username", "password"));
using (var client = new SshClient(connectionInfo))
client.Connect();
var test = client.RunCommand("sudo mycommand");
结果
"sudo: sorry, you must have a tty to run sudo"
问题:如何使用 SSH.NET 模拟终端模拟器?
我在 https://refactoragain.com/2016/05/27/ssh-net-echo-sudo-s/ 上找到的以下代码似乎创建了一个终端仿真:
SshClient client = new SshClient(server_address, 22, login, password);
client.Connect();
IDictionary<Renci.SshNet.Common.TerminalModes, uint> modes =
new Dictionary<Renci.SshNet.Common.TerminalModes, uint>();
termkvp.Add(Renci.SshNet.Common.TerminalModes.ECHO, 53);
ShellStream shellStream =
sshClient.CreateShellStream("xterm", 80, 24, 800, 600, 1024, modes);
var output = shellStream.Expect(new Regex(@"[$>]"));
shellStream.WriteLine("sudo sh/home/my_user_name/scripts/install_and_configure.sh");
output = shellStream.Expect(new Regex(@"([$#>:])"));
shellStream.WriteLine(password);
client.Disconnect();
但这对我来说是希腊语,因为它需要一个我的用户名似乎没有的主目录。为什么我必须断开连接? (代码的最后一行)
我只想 运行 Linux 命令并在我的代码中获取 return 字符串!
祝大家周末愉快。
大概my command
里面有sudo
?
sudo
是交互式的,要求输入密码,并且 RunCommand
无论如何都不提供向命令发送输入。
您需要改用 ShellStream
。
var sh = client.CreateShellStream("", 0, 0, 0, 0);
sh.WriteLine("my command");
sh.WriteLine("sudo password");
我正在使用 Renci.SshNet 并且远程 Linux 服务器以某种方式知道我没有使用终端仿真器连接。所以:
using Renci.SshNet;
var connectionInfo = new ConnectionInfo("host","username", new PasswordAuthenticationMethod("username", "password"));
using (var client = new SshClient(connectionInfo))
client.Connect();
var test = client.RunCommand("sudo mycommand");
结果
"sudo: sorry, you must have a tty to run sudo"
问题:如何使用 SSH.NET 模拟终端模拟器?
我在 https://refactoragain.com/2016/05/27/ssh-net-echo-sudo-s/ 上找到的以下代码似乎创建了一个终端仿真:
SshClient client = new SshClient(server_address, 22, login, password);
client.Connect();
IDictionary<Renci.SshNet.Common.TerminalModes, uint> modes =
new Dictionary<Renci.SshNet.Common.TerminalModes, uint>();
termkvp.Add(Renci.SshNet.Common.TerminalModes.ECHO, 53);
ShellStream shellStream =
sshClient.CreateShellStream("xterm", 80, 24, 800, 600, 1024, modes);
var output = shellStream.Expect(new Regex(@"[$>]"));
shellStream.WriteLine("sudo sh/home/my_user_name/scripts/install_and_configure.sh");
output = shellStream.Expect(new Regex(@"([$#>:])"));
shellStream.WriteLine(password);
client.Disconnect();
但这对我来说是希腊语,因为它需要一个我的用户名似乎没有的主目录。为什么我必须断开连接? (代码的最后一行)
我只想 运行 Linux 命令并在我的代码中获取 return 字符串!
祝大家周末愉快。
大概my command
里面有sudo
?
sudo
是交互式的,要求输入密码,并且 RunCommand
无论如何都不提供向命令发送输入。
您需要改用 ShellStream
。
var sh = client.CreateShellStream("", 0, 0, 0, 0);
sh.WriteLine("my command");
sh.WriteLine("sudo password");