Skip to content

Commit 73e56a2

Browse files
v1.0.0
0 parents  commit 73e56a2

7 files changed

Lines changed: 419 additions & 0 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/vendor
2+
/nbproject
3+
.DS_Store
4+
/testes

composer.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "crphp/ssh",
3+
"type": "library",
4+
"description": "Biblioteca SSH para gerenciamento de máquina remota",
5+
"keywords": ["ssh", "acesso remoto", "linux"],
6+
"license": "MIT",
7+
"support": {
8+
"issues": "https://github.com/crphp/ssh/issues",
9+
"source": "https://github.com/crphp/ssh"
10+
},
11+
"authors": [
12+
{
13+
"name": "Fábio Jânio",
14+
"email": "contato@fabiojanio.com"
15+
}
16+
],
17+
"require": {
18+
"php": ">=5.5.12",
19+
"crphp/core": "^1.0",
20+
"phpseclib/phpseclib": "^2.0"
21+
},
22+
"autoload": {
23+
"psr-4": {
24+
"Crphp\\Ssh\\": "src/"
25+
}
26+
},
27+
"minimum-stability": "dev"
28+
}

license

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
The MIT License (MIT)
2+
Copyright (c) fabiojanio.com
3+
4+
Permission is hereby granted, free of charge, to any person obtaining a copy
5+
of this software and associated documentation files (the "Software"), to deal
6+
in the Software without restriction, including without limitation the rights
7+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
copies of the Software, and to permit persons to whom the Software is
9+
furnished to do so, subject to the following conditions:
10+
11+
The above copyright notice and this permission notice shall be included in
12+
all copies or substantial portions of the Software.
13+
14+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20+
THE SOFTWARE.

readme.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# crphp/ssh
2+
Está é uma biblioteca que faz uso do protocolo **SSH (Secure Shell)** para gerenciamento de máquinas remotas.
3+
4+
Está biblioteca segue os padrões descritos na [PSR-2](http://www.php-fig.org/psr/psr-2/), logo,
5+
isso implica que a mesma está em conformidade com a [PSR-1](http://www.php-fig.org/psr/psr-1/).
6+
7+
As palavras-chave "DEVE", "NÃO DEVE", "REQUER", "DEVERIA", "NÃO DEVERIA", "PODERIA", "NÃO PODERIA",
8+
"RECOMENDÁVEL", "PODE", e "OPCIONAL" neste documento devem ser interpretadas como descritas no
9+
[RFC 2119](http://tools.ietf.org/html/rfc2119). Tradução livre [RFC 2119 pt-br](http://rfc.pt.webiwg.org/rfc2119).
10+
11+
1. [Referências](#referencia)
12+
1. [Funcionalidades](#funcionalidades)
13+
1. [Requisitos (recomendados)](#requisitos)
14+
1. [Baixando o pacote crphp/ssh para o servidor](#ssh)
15+
1. [Exemplos de uso](#exemplos)
16+
1. [Licença (MIT)](#licenca)
17+
18+
## 1 - <a id="referencias"></a>Referências
19+
- [PSR-1](http://www.php-fig.org/psr/psr-1/)
20+
- [PSR-2](http://www.php-fig.org/psr/psr-2/)
21+
- [RFC 2119](http://tools.ietf.org/html/rfc2119). Tradução livre [RFC 2119 pt-br](http://rfc.pt.webiwg.org/rfc2119)
22+
23+
## 2 - <a id="funcionalidades"></a>Funcionalidades
24+
- [x] Consultar RAM
25+
- [ ] Consultar CPU (em análise)
26+
- [ ] Consultar Disco Rígido (em análise)
27+
- [ ] Listar Serviços (em análise)
28+
- [ ] Stop / Start de serviço (em análise)
29+
- [ ] Listar processos (em análise)
30+
- [ ] Matar / Finalizar processos (em análise)
31+
- [ ] Lançar processos (em análise)
32+
- [ ] Listar e matar sessões (em análise)
33+
34+
## 3 - <a id="preparando-o-servidor"></a>Requisitos
35+
> :exclamation: Os requisitos sugeridos logo abaixo representam as versões utilizadas em nosso ambiente
36+
de desenvolvimento e produção, logo não garantimos que a solução aqui apresentada irá rodar integralmente
37+
caso as versões dos elementos abaixo sejam outras.
38+
39+
### 3.1 - <a id="requisitos"></a>Requisitos (recomendados)
40+
Servidor
41+
- REQUER Apache >= 2.4.10
42+
- REQUER PHP >= 5.5.12
43+
44+
Cliente
45+
- REQUER servidor SSH
46+
- É RECOMENDÁVEL ativar as bibliotecas **mcrypt**, **gmp** ou **bcmath**
47+
48+
## 4 - <a id="ssh"></a>Baixando o pacote crphp/wmi para o servidor
49+
50+
Para a etapa abaixo estou pressupondo que você tenha o composer instalado e saiba utilizá-lo:
51+
```
52+
composer require crphp/wmi
53+
```
54+
55+
Ou se preferir criar um projeto:
56+
```
57+
composer create-project --prefer-dist crphp/wmi nome_projeto
58+
```
59+
60+
Caso ainda não tenha o composer instalado, obtenha este em: https://getcomposer.org/download/
61+
62+
## 5 - <a id="exemplos"></a>Exemplos de uso
63+
64+
**Consultar Memória Ram**:
65+
```php
66+
use Crphp\Ssh\Conector\Ssh;
67+
use Crphp\Ssh\Sistema\MemoriaRam;
68+
69+
$ssh = new Ssh;
70+
$ssh->conectar('endereco_do_servidor', 'usuario', 'senha');
71+
72+
if($ssh->status()) {
73+
$ram = new MemoriaRam($ssh);
74+
echo "<pre>";
75+
print_r($ram->detalhes());
76+
echo "</pre>";
77+
78+
} else {
79+
echo $ssh->mensagemErro();
80+
}
81+
```
82+
83+
> Você DEVE sempre instânciar o conector Ssh e a classe referente ao elemento que deseja manipular.
84+
85+
**Também é possível executar suas próprias consultas customizadas**
86+
```php
87+
use Crphp\Ssh\Conector\Ssh;
88+
89+
$ssh = new Ssh;
90+
$ssh->conectar('endereco_do_servidor', 'usuario', 'senha');
91+
echo $ssh->executar('pwd');
92+
```
93+
94+
## 6 - <a id="licenca">Licença (MIT)
95+
Para maiores informações, leia o arquivo de licença disponibilizado junto desta biblioteca.

src/Auxiliares/Transformar.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
/**
4+
* Classe utilizada para formatar valores, tais como unidades de medida, data,
5+
* hora, etc
6+
*
7+
* @package crphp
8+
* @subpackage wmi
9+
* @author Fábio J L Ferreira <contato@fabiojanio.com>
10+
* @license MIT (consulte o arquivo license disponibilizado com este pacote)
11+
* @copyright (c) 2016, Fábio J L Ferreira
12+
*/
13+
14+
namespace Crphp\Ssh\Auxiliares;
15+
16+
use Crphp\Core\Auxiliares\Capacidade;
17+
18+
class Transformar extends Capacidade
19+
{
20+
// Pendente de implementação
21+
}

src/Conector/Ssh.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
/**
4+
* Essa classe fornece uma interface de conexão SSH com máquinas Linux, Unix e
5+
* qualquer outro sistema que suporte conexões SSH. Possibilitando dessa forma a
6+
* execução de comandos remotos de forma rápida, eficiente e segura
7+
*
8+
* @package crphp
9+
* @subpackage ssh
10+
* @author Fábio J L Ferreira <contato@fabiojanio.com>
11+
* @license MIT (consulte o arquivo "license" disponibilizado com este pacote)
12+
* @copyright (c) 2016, Fábio J L Ferreira
13+
*/
14+
15+
namespace Crphp\Ssh\Conector;
16+
17+
use \Exception;
18+
use \RuntimeException;
19+
use phpseclib\Net\SSH2;
20+
use Crphp\Core\Sistema\Conector;
21+
22+
class Ssh extends Conector
23+
{
24+
/**
25+
* Estabelece conexão via SSH
26+
*
27+
* @param string $host
28+
* @param string $usuario
29+
* @param string $senha
30+
* @param int $porta
31+
* @param int $timeout
32+
* @return null
33+
*/
34+
public function conectar($host, $usuario = null, $senha = null, $porta = 22, $timeout = 10)
35+
{
36+
try {
37+
$this->conexao = new SSH2($host, $porta, $timeout);
38+
if (!$this->conexao->login($usuario, $senha)) {
39+
throw new Exception("O login falhou!");
40+
}
41+
42+
} catch (Exception $e) {
43+
$this->conexao = false;
44+
$this->mensagemErro = $e->getMessage();
45+
}
46+
}
47+
48+
/**
49+
* Executa a instrução remotamente
50+
*
51+
* @param string $instrucao
52+
* @return object|string em caso de erro retorna uma string
53+
*/
54+
public function executar($instrucao)
55+
{
56+
try {
57+
if (!$this->conexao) {
58+
throw new RuntimeException("Antes de executar uma instrução é necessário instanciar uma conexão!");
59+
}
60+
61+
// @see http://php.net/manual/en/ref.com.php
62+
if (!$retorno = $this->conexao->exec($instrucao)) {
63+
throw new RuntimeException("O host remoto não retornou dados!");
64+
}
65+
66+
return $retorno;
67+
} catch (RuntimeException $e) {
68+
return $e->getMessage();
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)