我有一个shell脚本makedir.sh
,如下所示。
sudo -H sh -c '
mkdir /usr/local/testdir;
if [ $? -eq 0 ];then
echo "Successfull";
else
echo "Unsuccessfull";
fi
'
我已经授予用户testuser使用sudo执行shell脚本的权限,但不需要询问密码。为此,我在/etc/sudoers
文件中添加了以下行,
testuser ALL=(ALL) NOPASSWD: ALL
它工作得很好,我可以用sudo运行命令,但不需要询问密码。上面的shell脚本也可以在不询问密码的情况下正常工作,在/usr/local
中创建目录testdir
。我的问题从这里开始。我想从php
文件中运行这个shell脚本。在当前场景中,shell脚本位于ip地址为10.3.2.0的远程机器中。以下是我的php
代码,但在运行此php代码时,它没有在/usr/local/
中创建任何目录(testdir)。请注意,我是PHP
的初学者。
PHP代码
<?php
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect("10.3.2.0", "22")))
{
echo "fail: unable to establish connection";
}
else
{
if(!ssh2_auth_password($con, "testuser", "abcdef"))
{
echo "fail: unable to authenticate ";
}
else
{
$stream = ssh2_exec($con, "./makedir.sh");
stream_set_blocking($stream, true);
$item = "";
while ($input = fread($stream,4096)) {
$item .= $input;
}
echo $item;
}
}
?>
外壳脚本-makedir.sh
(位于10.3.2.0,与上述外壳脚本相同)
#!/bin/sh
sudo -H sh -c '
mkdir /usr/local/testdir;
if [ $? -eq 0 ];then
echo "Successfull";
else
echo "Unsuccessfull";
fi
'
谢谢。
据我所知,sudo命令在php的ssh2模块中不起作用。您将需要以拥有该目录权限的用户身份进行连接。
嗯。。。这个问题是一年前的xD,但我仍然可能停止要将sudo与ssh2_exec一起使用,您需要一些技巧。这是不安全的,不建议使用,但如果你没有其他选择,请使用
ssh2_exec($connection, "echo sudopw | yourscript.sh" . PHP_EOL);
并且您的脚本必须使用参数-S 调用sudo
"sudo -S mkdir folder"
应该工作