运行多个PHP SSH2脚本

时间:2016-01-15 20:29:04

标签: php macos ssh shutdown

我有一家拥有大约10台Mac的商店。 当前我可以使用此代码

通过PHP SSH2函数远程关闭/重启它们
<?php
                include('Net/SSH2.php');

                $server = "hostname";
                $username = "user";
                $password = "pwd";
                $command = "sudo shutdown -r now";

                $ssh = new Net_SSH2($server);
                if (!$ssh->login($username, $password)) {
                    exit('Login Failed');
                }

                echo $ssh->exec($command);
                echo "Sucessfully Restarted blah blah blah";
            ?>

但是为了关闭/重启10个终端,我必须运行10个不同的脚本才能实现。有什么方法可以连接到多个服务器并运行相同的命令吗?

2 个答案:

答案 0 :(得分:0)

您可以将主机名和凭据存储在多维array中。这将允许您使用foreach遍历每个项目,并在每个主机上执行所需的命令。以下是您需要做的一个示例:

<?php
include('Net/SSH2.php');

$hosts = array(
    array(
        'hostname' => 'hostname1',
        'username' => 'user1',
        'password' => 'pwd1'
    ),
    array(
        'hostname' => 'hostname2',
        'username' => 'user2',
        'password' => 'pwd2'
    )
);

$command = "sudo shutdown -r now";

foreach ($hosts as $host) {
    $ssh = new Net_SSH2($host['hostname']);

    if (!$ssh->login($host['username'], $host['password'])) {
        echo "Login Failed for host '{$host['hostname']}'\n";

        continue;
    }

    echo $ssh->exec($command);
    echo "Sucessfully Restarted {$host['hostname']}\n";
}

希望这有帮助。

关于安全性:建议您使用SSH密钥而不是用户名和密码。此外,请确保将mac保留在未打开的网络上,例如,对于客户,您应该使用专用网络。

答案 1 :(得分:0)

经过一些试验和错误并试图理解代码。我通过对代码的一些修改解决了这个问题。再添加一个&#34;名称&#34;在每个数组中。然后,删除echo,并用变量替换它。因此,每当我想获得状态时,我都可以调用该值。

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');

$hosts = array(
    array(
        'hostname' => 'hostname1',
        'username' => 'user',
        'password' => 'pwd',
        'name' => '1sthost'  
    ),
    array(
        'hostname' => 'hostname2',
        'username' => 'user',
        'password' => 'pwd',
        'name' => '2ndhost'  
    )
);

$command = "shutdown -r now";

foreach ($hosts as $host) {
    $ssh = new Net_SSH2($host['hostname']);

    if (!$ssh->login($host['username'], $host['password'])) {
        $$host['name'] = "{$host['hostname']}\n failed";

        continue;
    }

    echo $ssh->exec($command);
    $$host['name'] = "{$host['hostname']}\n success";

}

?>


<?php echo $1sthost; ?>
<?php echo $2ndhost; ?>