通过PHP启动远程服务
Start remote service through PHP
基本上我想通过 PHP ssh2_connect
函数向服务器传递不同的命令。但是我需要通过对不同的命令使用不同的按钮来传递它,但是无法做到。
下面是我的代码和按钮:
<?php
$connection = ssh2_connect('ipaddress', 22);
ssh2_auth_password($connection, 'root', 'password');
if (isset($_POST['button'])) ssh2_exec($stream = ssh2_exec($connection, 'systemctl stop apache2'));
?>
<form action="" method="post">
<button type="submit" name="button">Apache2</button
没有按钮的代码:
<?php
$connection = ssh2_connect('ipaddress', 22);
ssh2_auth_password($connection, 'root', 'password');
$stream = ssh2_exec($connection, 'systemctl stop apache2');
几件事:
- 您的代码未完成,缺少 HTML 的其余部分。
- 您的嵌套
ssh2_exec($stream = ssh2_exec(
,很可能是错字。
- 你停止的 apache 没有启动它。
以下将帮助您入门,希望对您有所帮助。
<?php
class ssh {
public function __construct($ip, $user, $pass, $port = 22)
{
// connect
$this->connection = ssh2_connect($ip, $port);
ssh2_auth_password($this->connection, $user, $pass);
}
public function exec($cmd = null)
{
// define streams
$this->stream = ssh2_exec($this->connection, $cmd);
$this->err_stream = ssh2_fetch_stream($this->stream, SSH2_STREAM_STDERR);
// get streams
$this->output = stream_get_contents($this->stream);
$this->error = stream_get_contents($this->err_stream);
return $this;
}
}
// define cmds
$commands = [
'stop_apache' => [
'description' => 'Stop Apache2',
'cmd' => 'systemctl stop apache2'
],
'restart_apache' => [
'description' => 'Restart Apache2',
'cmd' => 'systemctl restart apache2'
],
'start_apache' => [
'description' => 'Start Apache2',
'cmd' => 'systemctl start apache2'
]
];
// handle post
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$error = [];
$result = '';
// validate input
if (empty($_POST['service'])) {
$error = [
'service' => 'Service type required!'
];
} elseif (!array_key_exists($_POST['service'], $commands)) {
$error = [
'service' => 'Invalid Service!'
];
}
// run cmd - $result->output will have stdout, $result->error will have stderr
if (empty($error)) {
$ssh = new ssh('127.0.0.1', 'root', 'password');
$result = $ssh->exec($commands[$_POST['service']]['cmd']);
}
}
?>
<form action="" method="post">
<?php if (!empty($error)): ?>
<h3>Error</h3>
<pre><?= print_r($error, true) ?></pre>
<?php endif ?>
<?php foreach ($commands as $key => $command): ?>
<button type="submit" name="service" value="<?= $key ?>"><?= $command['description'] ?></button>
<?php endforeach ?>
</form>
<?php if (!empty($result)): ?>
<pre><?= print_r($result, true) ?></pre>
<?php endif ?>
基本上我想通过 PHP ssh2_connect
函数向服务器传递不同的命令。但是我需要通过对不同的命令使用不同的按钮来传递它,但是无法做到。
下面是我的代码和按钮:
<?php
$connection = ssh2_connect('ipaddress', 22);
ssh2_auth_password($connection, 'root', 'password');
if (isset($_POST['button'])) ssh2_exec($stream = ssh2_exec($connection, 'systemctl stop apache2'));
?>
<form action="" method="post">
<button type="submit" name="button">Apache2</button
没有按钮的代码:
<?php
$connection = ssh2_connect('ipaddress', 22);
ssh2_auth_password($connection, 'root', 'password');
$stream = ssh2_exec($connection, 'systemctl stop apache2');
几件事:
- 您的代码未完成,缺少 HTML 的其余部分。
- 您的嵌套
ssh2_exec($stream = ssh2_exec(
,很可能是错字。 - 你停止的 apache 没有启动它。
以下将帮助您入门,希望对您有所帮助。
<?php
class ssh {
public function __construct($ip, $user, $pass, $port = 22)
{
// connect
$this->connection = ssh2_connect($ip, $port);
ssh2_auth_password($this->connection, $user, $pass);
}
public function exec($cmd = null)
{
// define streams
$this->stream = ssh2_exec($this->connection, $cmd);
$this->err_stream = ssh2_fetch_stream($this->stream, SSH2_STREAM_STDERR);
// get streams
$this->output = stream_get_contents($this->stream);
$this->error = stream_get_contents($this->err_stream);
return $this;
}
}
// define cmds
$commands = [
'stop_apache' => [
'description' => 'Stop Apache2',
'cmd' => 'systemctl stop apache2'
],
'restart_apache' => [
'description' => 'Restart Apache2',
'cmd' => 'systemctl restart apache2'
],
'start_apache' => [
'description' => 'Start Apache2',
'cmd' => 'systemctl start apache2'
]
];
// handle post
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$error = [];
$result = '';
// validate input
if (empty($_POST['service'])) {
$error = [
'service' => 'Service type required!'
];
} elseif (!array_key_exists($_POST['service'], $commands)) {
$error = [
'service' => 'Invalid Service!'
];
}
// run cmd - $result->output will have stdout, $result->error will have stderr
if (empty($error)) {
$ssh = new ssh('127.0.0.1', 'root', 'password');
$result = $ssh->exec($commands[$_POST['service']]['cmd']);
}
}
?>
<form action="" method="post">
<?php if (!empty($error)): ?>
<h3>Error</h3>
<pre><?= print_r($error, true) ?></pre>
<?php endif ?>
<?php foreach ($commands as $key => $command): ?>
<button type="submit" name="service" value="<?= $key ?>"><?= $command['description'] ?></button>
<?php endforeach ?>
</form>
<?php if (!empty($result)): ?>
<pre><?= print_r($result, true) ?></pre>
<?php endif ?>