C# 在 SSH.NET 上发送 Ctrl+Y
C# send Ctrl+Y over SSH.NET
我目前正在使用 SSH.net 并尝试连接到 Avaya 交换机。
我的代码如下所示:
using (var client = new SshClient(ip, username, password))
{
client.Connect();
//Sending CTRL+Y
SshCommand x = client.RunCommand("enable");
client.Disconnect();
}
我还没有找到解决方案。
是否有任何解决方法或命令可以用来发送我的 CTRL+Y?
SSH.NET 不支持向使用 SshClient.RunCommand
(“执行”通道)执行的命令发送输入。
您必须使用“shell”频道(SshClient.CreateShell
或 SshClient.CreateShellStream
)。这通常不推荐用于命令自动化。 SSH.NET 更是如此,它甚至不允许您关闭“shell”频道的伪终端。这会带来许多令人讨厌的副作用,尤其是 Linux 上的“智能”shells。但是对于像开关这样的设备,它可能是可以忍受的。
尤其是像 Ctrl+Y 这样的控制序列在伪终端中更复杂。但同样,我们希望开关的“shell”足够愚蠢,可以简单地接受 Ctrl+Y 的纯 ASCII 代码,什么是 25 = x19.
ShellStream shellStream = client.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
shellStream.Write("enable\n");
shellStream.Write("\u19");
while (true)
{
string s = shellStream.Read();
Console.Write(s);
}
我目前正在使用 SSH.net 并尝试连接到 Avaya 交换机。
我的代码如下所示:
using (var client = new SshClient(ip, username, password))
{
client.Connect();
//Sending CTRL+Y
SshCommand x = client.RunCommand("enable");
client.Disconnect();
}
我还没有找到解决方案。
是否有任何解决方法或命令可以用来发送我的 CTRL+Y?
SSH.NET 不支持向使用 SshClient.RunCommand
(“执行”通道)执行的命令发送输入。
您必须使用“shell”频道(SshClient.CreateShell
或 SshClient.CreateShellStream
)。这通常不推荐用于命令自动化。 SSH.NET 更是如此,它甚至不允许您关闭“shell”频道的伪终端。这会带来许多令人讨厌的副作用,尤其是 Linux 上的“智能”shells。但是对于像开关这样的设备,它可能是可以忍受的。
尤其是像 Ctrl+Y 这样的控制序列在伪终端中更复杂。但同样,我们希望开关的“shell”足够愚蠢,可以简单地接受 Ctrl+Y 的纯 ASCII 代码,什么是 25 = x19.
ShellStream shellStream = client.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
shellStream.Write("enable\n");
shellStream.Write("\u19");
while (true)
{
string s = shellStream.Read();
Console.Write(s);
}