[add] First
This commit is contained in:
140
ssh2.php
Normal file
140
ssh2.php
Normal file
@@ -0,0 +1,140 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user