У меня в магазине около 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 различных сценариев, чтобы добиться этого. Есть ли способы, где я могу подключиться к нескольким серверам и выполнить одну и ту же команду?
Вы можете хранить имена хостов и учетные данные в многомерном массив. Это позволит вам перебирать каждый элемент, используя для каждого и выполните необходимую команду на каждом хосте. Вот пример того, что вам нужно сделать:
<?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 в сети, которая не открыта, например, для клиентов, вы должны использовать частную сеть.
После проб и ошибок и попыток понять код. Я решил это с небольшой модификацией вашего кода. Добавлено еще одно «имя» в каждом массиве. Затем удалите эхо и замените его переменной. Поэтому, когда я хочу получить статус, я могу просто вызвать значение.
<?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; ?>