Команда Linux не работает из выполнения .NET при использовании библиотеки SharpSSH

Я пытаюсь запустить очень простую команду в Linux через .NET, используя библиотеку SharpSsh .NET. Код не генерирует никаких исключений, и он по-прежнему не работает. Когда я запускаю команду sudo php /www/data/{directory}/scripts/create_file.php с терминала, она создает файл. И когда я запускаю команду sudo php /www/data/{directory}/scripts/delete_file.php из терминала, она удаляет файл. При вызове этого кода из .NET я не вижу создаваемого / удаляемого файла.

См. Этот ответ для настройки:
Библиотека SharpSSH .NET: невозможно подключиться к Linux (Debian) из .NET

create_file.php:

<?php
$handle = fopen( 'test.txt', 'w' );
fwrite( $handle, 'Test Contents' );
fclose( $handle );

delete_file.php:

<?php
if( file_exists( 'test.txt' ) )
        unlink( 'test.txt' );

Код .NET:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tamir.SharpSsh;

namespace Testing
{
    public class Unix
    {
        public static void CreateFile()
        {
            SshExec ssh = new SshExec(Constants.LINUX_HOST, Constants.LINUX_USER, Constants.LINUX_PASSWORD);
            ssh.Connect();
            String result = ssh.RunCommand("sudo php " + Constants.PHP_SCRIPTS_DIR + "create_file.php");
        }

        public static void DeleteFile()
        {
            SshExec ssh = new SshExec(Constants.LINUX_HOST, Constants.LINUX_USER, Constants.LINUX_PASSWORD);
            ssh.Connect();
            String result = ssh.RunCommand("sudo php " + Constants.PHP_SCRIPTS_DIR + "delete_file.php");
        }
    }
}

person MacGyver    schedule 12.03.2012    source источник
comment
Что попадает в строку результата?   -  person Broam    schedule 12.03.2012
comment
Требуется ли sudo пароль для этой операции? Если нет, то требуется ли это с первого раза? Если это правда, машина кэширует учетные данные для аутентификации. Зачем вам нужно запускать php с правами root? Это следует запускать от имени пользователя, владеющего файлом.   -  person Broam    schedule 12.03.2012
comment
хмммм хороший момент. Это происходит в терминале. Дай мне попробовать.   -  person MacGyver    schedule 12.03.2012
comment
Я не думаю, что моя проблема - это команда. Я обнаружил, что вы можете прочитать ввод со стандартного ввода, поместив эхо-пароль перед командой. И это все равно не сработало: ssh.RunCommand (echo \ + Constants.LINUX_PASSWORD + \ | sudo php + Constants.PHP_SCRIPTS_BUYEMP_DIR + delete_file.php);   -  person MacGyver    schedule 13.03.2012
comment
Какую версию библиотеки SharpSSH вы используете? В целом он немного староват и груб в использовании. Если вы попробуете новейшую компиляцию на bitbucket.org/mattgwagner/sharpssh, и это не сработает вы собираетесь проверить SSH.net на CodePlex. Эта библиотека в хорошем состоянии.   -  person MattGWagner    schedule 13.03.2012
comment
Тот, который указан в гиперссылке под этим текстом в моем вопросе, см. Этот ответ для настройки:   -  person MacGyver    schedule 14.03.2012
comment
О, боже, вы используете библиотеку с 2005 года ... даже Тамир обновлял ее на SourceForge примерно до 2007 года. Попробуйте новую версию.   -  person MattGWagner    schedule 14.03.2012
comment
@MattGWagner, можешь прислать мне ссылку на последнюю версию?   -  person MacGyver    schedule 25.04.2012
comment
bitbucket.org/mattgwagner/sharpssh имеет полуобновленную версию, в которую я накатал несколько патчей.   -  person MattGWagner    schedule 25.04.2012


Ответы (1)


Я предполагаю, что эти игрушечные php-файлы являются уменьшенным случаем чего-то большего.

Если вам действительно нужно создать и удалить файл, не используйте php - вы можете просто использовать команду оболочки напрямую.

Если вы не хотите отключать запрос пароля, для этого есть синтаксис в файле /etc/sudoers - см. «NOPASSWD», здесь.

PHP не следует запускать от имени пользователя root, особенно с такими переменными в командной строке. Если у вас возникли проблемы с разрешениями - решите их! PHP следует запускать от имени пользователя с минимальными привилегиями.

Если вам нужна «обслуживающая» учетная запись для ssh, и вы не хотите, чтобы у пользователя php были дополнительные возможности, сделайте его другим пользователем, который разделяет группу с пользователем php - и вы можете использовать разрешения группы. (Возможно, вам придется поиграть с разрешениями по умолчанию при создании файла.)

person Broam    schedule 12.03.2012
comment
Мне удалось избежать запроса пароля другим способом - поставив эхо перед скриптом. Проблема, похоже, связана с библиотекой SharpSsh. - person MacGyver; 13.03.2012