Команда Linux не работает из .NET при использовании библиотеки SharpSSH - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь запустить очень простую команду в 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");
        }
    }
}

1 Ответ

0 голосов
/ 12 марта 2012

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

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

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

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

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

...