2012-03-12 35 views
0

我试图在Linux中通过.NET使用SharpSsh .NET库运行一个非常简单的命令。该代码不会抛出任何异常,并且仍然不起作用。当我从终端运行sudo php /www/data/{directory}/scripts/create_file.php命令时,它会创建该文件。当我从终端运行sudo php /www/data/{directory}/scripts/delete_file.php命令时,它将删除该文件。从.NET调用此代码时,我看不到正在创建/删除的文件。Linux命令在使用SharpSSH库时无法通过.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"); 
     } 
    } 
} 
+0

结果字符串中出现了什么? – Broam 2012-03-12 18:32:02

+0

这是一个空字符串===>“” – MacGyver 2012-03-12 18:32:50

+1

sudo是否需要此操作的密码?如果不是,它是否第一次需要它?如果是这样,机器正在缓存身份验证凭证。 为什么你需要以root身份运行php?这应该作为拥有该文件的用户运行。 – Broam 2012-03-12 18:34:58

回答

0

我假设这些玩具php文件是一个较大的缩小的情况。

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

如果您不想关闭密码提示,那么在/etc/sudoers文件中有相应的语法 - 请参阅“NOPASSWD”here

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

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

+0

我能够以另一种方式避免密码提示 - 将回显放在脚本前面。这个问题似乎与SharpSsh库有关。 – MacGyver 2012-03-13 07:32:54