我有一家拥有大约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个不同的脚本才能实现。有什么方法可以连接到多个服务器并运行相同的命令吗?
答案 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; ?>