我试图最终使用 phpshell_exec
功能创建新的 Linux 用户。然而,即使进行调试,我也遇到了问题。这是我的代码
<?PHP
function adduser($username,$password,$server){
try{
//3 debug statements
$output=shell_exec("pwd");
echo $output;
shell_exec("touch test.txt");
//3 debug statements are requested by Christian
echo '<pre>';
print_r(execute('pwd'));
print_r(execute('touch test.txt'));
//actuall code
$output=shell_exec("ssh root@$server \"adduser $username; echo $password | passwd $username --stdin\"");
}
catch(Exception $e){
echo 'could not add user '.$e->getMessage();
}
}
$servers = array('192.168.1.8');
foreach($servers as $server){
echo $_GET['USER']." ".$_GET['PASSWORD'];
adduser($_GET['USER'],$_GET['PASSWORD'],$server);
}
The try-catch
语句不执行任何操作,使我相信 shell 错误不会作为 PHP 错误传播(Python 也是如此)。线路$output=shell_exec("pwd")
返回正确的目录。线路shell_exec("touch test.txt")
但是,无法创建文件 test.txt (即使我给出完整路径“/home/user/.../test.txt”)。
不用说,添加用户的实际代码也不起作用。
EDIT我设法修复了一些代码。这touch test.txt
错误是由于权限不足造成的。 Apache 使用用户 www-data 登录,我只是为该用户创建了一个主文件夹,并确保触摸该主文件夹中的文件。
然而,按照 Christian 的要求添加三个调试语句现在引起了问题。
EDIT经过进一步检查,这与以用户 www-data 登录时无法以 root 身份 ssh 相关。ssh -v
回报debug1: read_passphrase: can't open /dev/tty: No such device or address
。我的猜测是 ssh 正在询问通用的“您想将 xxx 永久添加到known_hosts吗”,但我无法回应。是否可以手动将用户添加到已知主机列表中?
- 许多(大多数?) PHP 的内部函数不会抛出异常,而是会引发错误。我认为你不会看到抛出异常
shell_exec()
- 我可能会 var_dump() 返回值,只是为了确保您明确知道它返回的内容。
- 我还建议研究诸如escapeshellarg()以避免您的输入出现问题。
一般情况下,我不会让 PHP 顺序执行多个命令,而是编写一个 shell 脚本来执行我需要的所有操作,然后从 PHP 调用它。调试时链条中少了一个环节,我发现我轻松了很多。
关于您的 SSH 命令本身,因为 apache 正在执行www-data
,它如何以 root 身份登录到有问题的机器?您是否已将 apache 用户的密钥添加到远程计算机。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)