在过去的三天里,我在 php 中遇到了一个问题。还没有找到解决方案。
我有一台 Cent OS 远程机器和一台 Ubuntu 本地机器。我有一个test.php
在本地机器中命名的 php 脚本,因此我想使用该 php 脚本在远程机器上运行一些 Linux 命令。我使用 phpseclib 连接到远程机器。以下是 php 脚本test.php
。
<?php
include('Net/SSH2.php');
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);
$ssh = new Net_SSH2('10.3.2.0');
if (!$ssh->login('makesubdomain','abcdabcd')) {
exit('Login Failed');
}
echo $ssh->exec('/usr/local/listdomain.backup/test/makedir.sh');
?>
我不能root
在这里使用用户,因为在远程 cent os 机器中已经禁用了 root 登录。所以我创建了这个makesubdomain
用户并赋予了 sudo 权限,也没有通过添加文件makesubdomain ALL=(ALL) NOPASSWD: ALL
的密码。/etc/sudoers
下面的一个是驻留在的 shell 脚本10.3.2.0
sudo -H sh -c '
mkdir /usr/local/testdir
if [ $? -eq 0 ];then
echo "success";
else
echo "not success";
fi
'
但是现在当我使用命令从终端运行 php 脚本时,php test.php
它显示错误sudo: sorry, you must have a tty to run sudo
。最终,我需要做什么test.php
以及使用给定的 php 脚本和 usermakedir.sh
来创建 .sh 文件中指定的目录。请建议,因为我是 php 的初学者。testdir
makesubdomain
(注意:我可以makedir.sh
在远程机器上成功运行文件,命令sudo ./makedir
为 user makesubdomain
,也无需提示 sudo 密码)
编辑
我在http://www.unix.com/shell-programming-scripting/201211-sudo-sorry-you-must-have-tty-run-sudo.htmlDefaults requiretty
中/etc/sudoers
给出了评论,它工作正常。如果不这样做,我还有其他选择吗?