我希望使用ssh.net与远程服务器保持对话
我正在做的是连接到主机,将更改目录等命令发送到除root之外的某个目录。将结果值存储为全局值。
然后我通过RunCommand()发送另一个命令来检查当前目录......
发生的事情是,我正在获取根目录,而不是我刚刚在初始运行命令中更改的目录。
似乎正在发生的事情是,虽然与服务器的连接一直处于打开状态,但我已经以某种方式重置终端会话,从而失去了我与服务器的对话。
有没有人知道如何使用ssh.net与远程服务器保持对话,这样我就可以发送多个命令并使状态保持不变?
E.g。命令1 = cd / somedir 命令2 = pwd,命令2的结果为/ somedir
答案 0 :(得分:1)
E.g。命令1 = cd / somedir命令2 = pwd,命令2的结果为/ somedir
你的例子看起来很好。但我认为,您希望更改目录并在该目录中运行第二个命令。
服务器连接是到服务器的ssh隧道,它不启动shell。 RunCommand()创建一个shell并运行一个命令,第二个RunCommand也创建一个新的shell并运行该命令,因此更改目录不会在命令之间保持不变。
建立连接后,使用ShellStream创建一个shell,您可以从中发送和接收交互式命令。
来自codeplex的示例:
string command = "your command";
using (var ssh = new SshClient(connectionInfo))
{
ssh.Connect();
string reply = String.Empty;
try
{
using (var shellStream = ssh.CreateShellStream("dumb", 0, 0, 0, 0, BUFFERSIZE))
{
// Wait for promt for 10 seconds, if time expires, exception is thrown
reply = shellStream.Expect(new Regex(@":.*>"), new TimeSpan(0, 0, 10));
shellStream.WriteLine(command);
// Wait for Read for 10 seconds, if time expires, exception is thrown
string result = shellStream.ReadLine(new TimeSpan(0, 0, 10));
}
}
catch
{
// Do something
}
}