141 lines
3.5 KiB
PHP
141 lines
3.5 KiB
PHP
<?php
|
|
|
|
// ssh protocols
|
|
// note: once openShell method is used, cmdExec does not work
|
|
|
|
class ssh2
|
|
{
|
|
|
|
private $use_pubkey_file = false;
|
|
private $host = '192.168.5.108';
|
|
private $user = 'Publisher';
|
|
private $port = '22';
|
|
private $password = 'Publisher';
|
|
private $con = null;
|
|
private $shell_type = 'xterm';
|
|
private $shell = null;
|
|
private $log = '';
|
|
|
|
public function __construct($use_pubkey_file = false, $host = '', $port = '')
|
|
{
|
|
|
|
if ($host != '') {
|
|
$this->host = $host;
|
|
}
|
|
|
|
if ($port != '') {
|
|
$this->port = $port;
|
|
}
|
|
|
|
if ($use_pubkey_file != '') {
|
|
$this->use_pubkey_file = $use_pubkey_file;
|
|
}
|
|
|
|
$methods = [];
|
|
if ($this->use_pubkey_file) {
|
|
// $methods['hostkey'] = 'ssh-rsa';
|
|
$methods = array(
|
|
'hostkey'=>'ssh-rsa,ssh-dss',
|
|
// 'kex' => 'diffie-hellman-group-exchange-sha256',
|
|
'client_to_server' => array(
|
|
'crypt' => 'aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc,blowfish-cbc',
|
|
'comp' => 'none'),
|
|
'server_to_client' => array(
|
|
'crypt' => 'aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc,blowfish-cbc',
|
|
'comp' => 'none'));
|
|
}
|
|
// $this->con = ssh2_connect($this->host, $this->port);
|
|
$this->con = ssh2_connect($this->host, $this->port, $methods);
|
|
if (!$this->con) {
|
|
$this->log .= "Connection failed !";
|
|
}
|
|
}
|
|
|
|
public function authKey($pubkey_filePath, $privkey_file_filePath)
|
|
{
|
|
|
|
if ($pubkey_filePath == '') {
|
|
return;
|
|
}
|
|
|
|
if ($privkey_file_filePath == '') {
|
|
return;
|
|
}
|
|
|
|
$rc = ssh2_auth_pubkey_file($this->con, $this->user, $pubkey_filePath, $privkey_file_filePath);
|
|
return;
|
|
}
|
|
|
|
public function authPassword($user = '', $password = '')
|
|
{
|
|
|
|
if ($user != '') {
|
|
$this->user = $user;
|
|
}
|
|
|
|
if ($password != '') {
|
|
$this->password = $password;
|
|
}
|
|
|
|
if (!ssh2_auth_password($this->con, $this->user, $this->password)) {
|
|
$this->log .= "Authorization failed !";
|
|
}
|
|
}
|
|
|
|
public function openShell($shell_type = '')
|
|
{
|
|
|
|
if ($shell_type != '') {
|
|
$this->shell_type = $shell_type;
|
|
}
|
|
|
|
$this->shell = ssh2_shell($this->con, $this->shell_type);
|
|
if (!$this->shell) {
|
|
$this->log .= " Shell connection failed !";
|
|
}
|
|
|
|
stream_set_blocking($this->shell, true);
|
|
}
|
|
|
|
public function writeShell($command = '')
|
|
{
|
|
|
|
fwrite($this->shell, $command . "\n");
|
|
}
|
|
|
|
public function cmdExec()
|
|
{
|
|
|
|
$argc = func_num_args();
|
|
$argv = func_get_args();
|
|
|
|
$cmd = '';
|
|
for ($i = 0; $i < $argc; $i++) {
|
|
if ($i != ($argc - 1)) {
|
|
$cmd .= $argv[$i] . " && ";
|
|
} else {
|
|
$cmd .= $argv[$i];
|
|
}
|
|
}
|
|
echo $cmd;
|
|
|
|
$stream = ssh2_exec($this->con, $cmd);
|
|
stream_set_blocking($stream, true);
|
|
return stream_get_contents($stream);
|
|
}
|
|
|
|
public function getLog()
|
|
{
|
|
return $this->log;
|
|
}
|
|
|
|
public function getResult()
|
|
{
|
|
$contents = '';
|
|
while (!feof($this->shell)) {
|
|
$contents .= fgets($this->shell);
|
|
}
|
|
return $contents;
|
|
}
|
|
}
|