Linux命令在使用SharpSSH库时从.NET执行不起作用

时间:2012-03-12 18:28:56

标签: php .net linux command sharpssh

我正在尝试使用SharpSsh .NET库在Linux中通过.NET运行一个非常简单的命令。代码不会抛出任何异常,它仍然无法正常工作。当我从终端运行sudo php /www/data/{directory}/scripts/create_file.php命令时,它会创建该文件。当我从终端运行sudo php /www/data/{directory}/scripts/delete_file.php命令时,它会删除该文件。从.NET调用此代码时,我看不到正在创建/删除文件。

请参阅以下答案进行设置:
SharpSSH .NET Library: unable to connect to Linux (Debian) from .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 :(得分:0)

我认为这些玩具php文件是一个更大的缩小的情况。

如果你需要实际创建和删除文件,不要使用php - 你可以直接使用shell命令。

如果您想要关闭密码提示,/etc/sudoers文件中有语法 - 请参阅“NOPASSWD”here

PHP应该以root身份运行,尤其是在命令行中使用变量。如果你有权限问题 - 解决它们! PHP应该以具有最小权限的用户身份运行。

如果你需要一个'维护'帐户来进行ssh,并且不想让php用户拥有额外的功能,那就让另一个用户与php用户共享一个组 - 你可以使用组权限。 (您可能需要在文件创建时使用默认权限。)