0

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

请参阅此答案进行设置:
SharpSSH .NET 库:无法从 .NET 连接到 Linux (Debian)

创建文件.php:

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

删除文件.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");
        }
    }
}
4

1 回答 1

0

我假设这些玩具 php 文件是更大的东西的简化案例。

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

如果您想关闭密码提示,文件中有相应的语法- 请参见此处/etc/sudoers的“NOPASSWD” 。

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

如果您需要一个“维护”帐户来 ssh,并且不想让 php 用户具有额外的功能,请使其成为与 php 用户共享组的另一个用户 - 您可以使用组权限。(您可能需要修改文件创建的默认权限。)

于 2012-03-12T18:40:38.187 回答