ssh.net поддерживает связь с сервером

Я хочу сохранить разговор с удаленным сервером с помощью ssh.net

Что я делаю, так это подключаюсь к хосту, отправляя команду, например, сменить каталог ... в какой-то каталог, кроме root. Сохраните значение результатов как глобальное.

Затем я отправляю другую команду через RunCommand (), чтобы проверить текущий каталог ...

Что происходит, я получаю корневой каталог, а не каталог, на который я только что перешел в начальной команде запуска.

Кажется, что происходит, пока соединение с сервером остается открытым, я каким-то образом сбросил сеанс терминала, тем самым потеряв разговор, который у меня был с сервером.

Кто-нибудь знает, как сохранить разговор с удаленным сервером с помощью ssh.net, чтобы я мог отправлять несколько команд и сохранять состояние?

Например. команда 1 = cd / somedir команда 2 = pwd, а результат команды 2 - / somedir


person petey m    schedule 10.06.2015    source источник
comment
Какой код вы пробовали? Редактирование вашего вопроса, чтобы показать ваш код, поможет людям помочь вам. Кроме того, добавление еще одного тега для сопровождения кода повысит видимость.   -  person ben rudgers    schedule 11.06.2015


Ответы (1)


Например. команда 1 = cd / somedir команда 2 = pwd, а результат команды 2 - / somedir

Ваш пример кажется прекрасным. Но я думаю, вы ожидаете сменить каталог и запустить вторую команду в этом каталоге.

Подключение к серверу - это ssh-туннель к серверу, он не запускает оболочку. RunCommand () создает оболочку и запускает команду, вторая команда RunCommand также создает новую оболочку и запускает команду, поэтому каталог изменения не сохраняется между командами.

После установления соединения используйте ShellStream для создания оболочки, из которой вы можете отправлять и получать интерактивные команды.

Пример из 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
    }
}
person Selcuk OZEN    schedule 26.09.2015
comment
Спасибо тебе за это. Это как раз та проблема, мне нужно было использовать класс shellstream для поддержания разговора. - person petey m; 06.02.2018