compilemachinegame/ssh2.php

141 lines
3.5 KiB
PHP
Raw Normal View History

2022-07-27 08:33:37 +00:00
<?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;
}
}