如果我正在执行这样的多个命令
'sudo -s && cd /apps/10.0.10.200/wso2am-1.7.0/repository/logs && tail wso2carbon.log'
但是当我用我的用户登录服务器时,我必须通过执行以下命令获得root权限
sudo -s
然后我还要重新输入密码。 所以我的问题是当我执行上面的命令时,我怎么能传递我的密码。因为我必须执行命令并等到它要求输入密码。 请指导我解决。 这是我的代码。
include('Net/SSH2.php');
$ssh = new Net_SSH2('10.0.10.200');
$ssh->login('xxxxx', 'xxxx') or die("Login failed");
echo $ssh->exec('sudo -s && cd /apps/10.0.10.200/wso2am-1.7.0/repository/logs && tail wso2carbon.log');
答案 0 :(得分:0)
这是一个非常糟糕的主意,只要您需要在代码中保留用户密码,这代表了一个不可忽视的安全问题(对ssh服务器的完全远程访问) )。您应该在要连接的ssh服务器上拥有一个特殊帐户,仅允许访问您要显示的日志文件。
但是,如果您查看this superuser question或运行sudo --help
。您将看到可以使用sudo -S
来获取sudo
命令以从stdin读取密码。
所以这应该可以解决问题:
$echo <password> | sudo -S <command>
使用php:
echo $ssh->exec('echo '.$password.'| sudo -S tail /apps/10.0.10.200/wso2am-1.7.0/repository/logs/wso2carbon.log');
答案 1 :(得分:0)
转到您的服务器并向用户提供没有密码的sudoers权限。
这是非常不安全的,但您可以使用命令/etc/sudoers
编辑sudo visudo
此命令将打开终端中的/etc/sudoers
文件,现在您可以使用以下行在其中添加用户条目,以执行没有密码的sudoers命令:
<user_name> ALL=NOPASSWD:ALL
将user_name替换为上一行中的用户名。
如果您的语法出错,可能会损坏您的sudoers文件,因此无法执行sudo命令。 如果发生这种情况,请使用此命令重建sudo文件:
pkexec visudo
然后输入sudo密码。