【问题标题】:Shutdown remote linux server with PHP使用 PHP 关闭远程 linux 服务器
【发布时间】:2016-06-03 23:10:01
【问题描述】:

我有一台安装了 LAMP 的始终运行的 Raspberry Pi,还有一台功率更大的服务器。我希望能够从 Raspberry Pi 上的 PHP 页面启动和关闭第二台服务器。我在树莓派页面上的代码是:

<form action="" method="POST">
<input type="Submit" value="Wake Up" name="WOL_Submit">
<input type="Submit" value="Shutdown" name="WOL_shutdown">
</form>

<?php

if(isset($_POST['WOL_Submit']))
{
    exec('sudo etherwake AA:BB:CC:DD:EE:FF');
    echo "WOL Packet sent...";
}

if(isset($_POST['WOL_shutdown']))
{
    exec('ssh user@192.168.1.100 "sudo /sbin/shutdown -P 0"');
    echo "Shutdown sent...";
}

?>

我已经设置了 SSH 密钥,所以当我从 Pi SSH 到第二台服务器时,我不需要输入密码,如果我正常 SSH,这可以正常工作,例如使用 putty。

在第二台服务器上,我还使用user ALL=(ALL) NOPASSWD: /sbin/shutdown 将用户添加到 visudo。

来自网页的 Wake on LAN 命令工作正常,第二台服务器启动,但关机命令没有。我收到消息“已发送关闭...”但服务器没有关闭。我尝试在exec('ssh user@192... 命令中交换" 和',也尝试使用ssh -t,但服务器仍然没有关闭。

【问题讨论】:

    标签: php linux ssh


    【解决方案1】:

    尝试 ssh -i /path/to/id_rsa user@192.... 并确保密钥为 chmod 600 并由 www-data 或任何运行 php 的用户拥有

    【讨论】:

    • 运行sudo chown www-data:www-data id_rsa,因为php页面以www-data运行-运行echo exec('whoami')进行确认。将脚本中的命令更新为exec('ssh /home/pi/.ssh/id_rsa user@192.168.1.100 "sudo /sbin/shutdown -P 0"')。但是仍然无法从 pi 上的 php 页面关闭第二台服务器。
    • 使用php系统命令查看实际命令输出。例如 $last_line = system('ls', $retval); // 打印附加信息 echo '
      输出的最后一行:' . $last_line 。 '
      返回值:' . $retval;
    • 另外,我没有在其中看到“-i”标志。
    • 对不起,上一条评论中的错字,肯定是在运行exec('ssh -i /home/pi/.ssh/id_rsa ...。 id_rsa 归 www-data 所有,权限设置为 600。当我运行 $last_line = (''ssh -i /home/pi/.ssh/id_rsa user@192.168.1.100 "sudo /sbin/shutdown -P now"', $retval) 并打印 $last_line 和 $retval 的值时,我得到“输出的最后一行:[空白] 返回值:255
    • 我不认识关机标志 - 试试sudo /sbin/shutdown -h now
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2016-04-18
    • 2012-01-18
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多