过去3天我在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
用户,因为root登录已在远程cent os机器中禁用。
所以我创建了这个makesubdomain
用户,并通过在makesubdomain ALL=(ALL) NOPASSWD: ALL
文件中添加/etc/sudoers
来提供sudo权限,也没有密码。下面是一个驻留在10.3.2.0
<的shell脚本/ p>
sudo -H sh -c '
mkdir /usr/local/testdir
if [ $? -eq 0 ];then
echo "success";
else
echo "not success";
fi
'
但是现在当我使用命令php test.php
从终端运行php脚本时,它显示错误sudo: sorry, you must have a tty to run sudo
。最终,我需要使用test.php
和makedir.sh
使用给定的php脚本和用户testdir
创建.sh文件中指定的目录makesubdomain
。请建议,因为我是php的初学者。
(注意:我可以使用命令makedir.sh
作为用户sudo ./makedir
在远程计算机上成功运行makesubdomain
文件,而且不会提示输入密码)
修改
我在Defaults requiretty
中对/etc/sudoers
中的{{1}}进行了评论,并且工作正常。如果不这样做,我还有其他选择吗?
答案 0 :(得分:0)
在执行$ssh->enablePTY()
之前尝试拨打$ssh->exec()
。