Использование SSH для запуска пользовательских сценариев на сервере Unix в C # - PullRequest
3 голосов
/ 03 мая 2011

Привет всем, я использовал новую библиотеку SHH для отправки команд на сервер Unix, и она отлично работает для меня.Он посылает нормальные команды просто отлично и получает правильные ответы.Тем не менее, я, кажется, сталкиваюсь с проблемой, когда пытаюсь использовать его для запуска пользовательского сценария (не сценария оболочки, а файла, который содержит другую команду и имеет аргументы)

Я пробовал несколько способов получитьэто работает.

На самом сервере unix следующие команды отлично работают и выполняют то, для чего предназначены:

  • cd script;script.oi someArg someArg - РАБОТАЕТ
  • csh -c "cd script; script.oi someArg someArg" - ТАКЖЕ РАБОТАЕТ
  • cd / users / bin / script;script.oi someArg1 someArg 2 - РАБОТАЕТ
  • csh -c "cd / users / bin / script; script.oi someArg1 someArg 2" - РАБОТАЕТ
  • / users / bin / script / script.oi someArg1 someArg2 - РАБОТАЕТ

Однако в коде я попробовал следующее:

string command = string.Format("csh -c \"cd script; script.oi {0} {1}\"", arg1, arg2); - DOES NOT WORK
string command = string.Format("cd script; script.oi {0} {1}", arg1, arg2); - DOES NOT WORK
string command = string.Format("cd /users/bin/script; script.oi {0} {1}", arg1, arg2); - DOES NOT WORK 
string command = string.Format("csh -c \"cd /users/bin/script; script.oi {0} {1}\"", arg1, arg2); - DOES NOT WORK 
string command = string.Format("/users/bin/script/script.oi {0} {1}", arg1, arg2); - DOES NOT WORK

Так что мне кажется, что происходит что-то еще.Я попробовал следующее:

string command = string.Format("csh -c \"ls\"", arg1, arg2);` - WORKS
string command = string.Format("ls", arg1, arg2);` - WORKS

Похоже, это связано с тем, что я пытаюсь запустить собственный сценарий, или, может быть, какая-то глупая настройка, которую я забыл.Дайте мне знать, если вам нужно больше подробностей.

РЕДАКТИРОВАТЬ: Под НЕ РАБОТАЕТ, я имею в виду, что результат, который возвращается в C #, должен что-то сказать, но результатпустой.Кроме того, сценарий отправляет сообщение TIBCO Rendevous, которое в итоге добавляет запись в БД, которая не отображается.Когда я говорю «РАБОТАЕТ», я имею в виду, что запись отображается в БД.

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Ну, я понял это. Оказывается, что сценарий выполнял команду, которая известна серверу unix через добавление в переменные unix eviroment. При использовании стандартного способа отправки команд в SSH.NET переменные окружения не импортируются (поэтому вы можете отправлять обычные команды, такие как ls, grep, cat, ect, но не эту).

Исправлено использование функциональности оболочки SSH библиотек, поскольку импортирует переменные окружения, поэтому оно знает, что это за команда в сценарии, и может ее выполнить. Для тех, кто использует эту замечательную библиотеку (которая все еще активно разрабатывается, всегда плюс), я включил ниже пример SSH.NET Shell code.

PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("some IP", "user", "pass");

try
{
    using (var client = new SshClient(connectionInfo))
    {
        client.Connect();
        var input = new MemoryStream(Encoding.ASCII.GetBytes(command));
        var shell = client.CreateShell(input, Console.Out, Console.Out, "xterm", 80, 24, 800, 600, "");
        shell.Stopped += delegate(object sender, EventArgs e)
        {
            Console.WriteLine("\nDisconnected...");
        };
        shell.Start();
        Thread.Sleep(1000);
        shell.Stop();
        client.Disconnect();
    }   
}
catch (Exception ex)
{
    // Exception stuff
}
0 голосов
/ 04 мая 2011

Поскольку скрипт должен быть исполняемым всеми, в аргументах должно быть что-то не так.Получите сгенерированную командную строку и попробуйте выполнить ее самостоятельно в SSH-сеансе (с чем-то вроде PuTTY).Если возможно, предоставьте нам сгенерированную команду.Я предполагаю, что в нем могут быть символы, которые нуждаются в правильном экранировании.

0 голосов
/ 04 мая 2011

Имеет ли пользователь, вошедший в систему с помощью клиента ssh, права на выполнение вызываемого исполняемого файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...