SlideShare a Scribd company logo
1 of 15
Conexões SSH com PHP 
Felipe Weckx
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
2/15 
Agenda 
● Para que usar SSH no PHP? 
● Bibliotecas disponíveis 
● Métodos de autenticação 
● Execução de comandos 
● Transferência de arquivos
●Para que usar SSH no PHP? 
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
3/15 
● Automação! 
● Deploy 
● Levantamento de dados de servidores 
● Execução de rotinas de manutenção 
● Start/Stop de serviços 
● Monitoramento logs
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
4/15 
Bibliotecas Disponíveis 
● ext/ssh2 
– Extensão em C 
– Somente SSHv2 
– Utiliza libssh2 
– Instalação no 
servidor 
– Procedural 
● PHPSecLib 
– Totalmente em 
PHP 
– Suporte SSH v1 e 
v2 
– Fácil de embutir 
na aplicação 
– Orientada a 
Objetos
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
5/15 
Métodos de Autenticação 
● Password 
– Keyboard-interactive (>= 0.12) 
● Chave RSA 
– Com senha 
● Multi-fator 
● Sem autenticação
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
6/15 
Conectando e Autenticando 
$con = ssh2_connect('ssh.com', 22); 
//Autenticação por senha 
if (!ssh2_auth_password($con, 'user', 'pass') { 
die('Erro no login com senha') 
} 
//Autenticação por chave RSA 
if (!ssh2_auth_pubkey_file($con, 'user','id_rsa.pub', 'id_rsa', 
'secret')) { 
Die('Erro no login com chave'); 
}
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
7/15 
Executando Comandos 
$stream = ssh2_exec($con, $cmd); 
if (!$stream) { 
die('Erro ao executar comando'); 
} 
stream_set_blocking($stream, true); 
stream_set_timeout($stream, 15); 
$result = stream_get_contents($stream); 
fclose($stream);
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
8/15 
Considerações 
● ssh2_exec Executa um comando 
simples 
● Comandos interativos podem dar 
problema 
● Sempre defina o tempo de timeout
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
9/15 
Comandos interativos 
● Utilizar fwrite e fread 
● Enviar o comando com no final n 
● Ler e interpretar a resposta 
● Enviar próxima informação 
● PHPSecLib tem o método read que já 
suporta expressões regulares
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
10/15 
Comandos Interativos 
$ssh = new Net_SSH2($host); 
if (!$ssh->login($user, $pass)) { 
exit('Login Failed'); 
} 
//Aguarda o prompt 
$output = $ssh->read('$'); 
//Executa o comando com sudo 
$ssh->write("sudo ls -lan"); 
//Aguarda o prompt da senha e envia a senha 
$output .= $ssh->read('/[pP]assword[^:]*:/', NET_SSH2_READ_REGEX); 
$ssh->write("{$pass}n"); 
//Lê o restante até o próximo prompt 
$output .= $ssh->read('$');
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
11/15 
Transferindo Arquivos 
● ssh2_scp_send( 
$con, 
'/tmp/teste_local.txt', 
'/tmp/teste_remoto.txt); 
● ssh2_scp_recv( 
$con, 
'/tmp/teste_remoto.txt', 
'/tmp/teste_local.txt' 
);
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
12/15 
Laravel 
● Utiliza PHPSecLib 
● Classes de abstração 
– SSH::into('staging')->run(array( 
'cd /var/www', 
'git pull origin master', 
)); 
● Envoy Task Runner 
– @task('deploy', ['on' => ['web-1', 'web-2']]) 
cd site 
git pull origin {{ $branch }} 
php artisan migrate 
@endtask
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
13/15 
Segurança 
● Nunca manter username e senha no 
código fonte 
● Preferir uso de arquivos de chaves 
– Trocar as chaves periodicamente 
● Log de todas as operações
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
14/15 
Perguntas?
PHP Conference 2014 Conexões SSH com PHP 
Felipe Weckx 
15/15 
Obrigado 
Felipe Weckx 
felipe@weckx.net 
@weckx 
github.com/weckx 
linkedin.com/in/felipeweckx 
http://blog.weckx.net

More Related Content

Viewers also liked

Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014Julio Bitencourt
 
Criptografia: matemática e lógica computacional protegendo informações
Criptografia: matemática e lógica computacional protegendo informaçõesCriptografia: matemática e lógica computacional protegendo informações
Criptografia: matemática e lógica computacional protegendo informaçõesAlex Camargo
 
Nota de aula seguranca da informacao - criptografia
Nota de aula   seguranca da informacao - criptografiaNota de aula   seguranca da informacao - criptografia
Nota de aula seguranca da informacao - criptografiafelipetsi
 
Criptografia
CriptografiaCriptografia
CriptografiaPaula P.
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with dockerRuoshi Ling
 

Viewers also liked (6)

Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
 
Criptografia: matemática e lógica computacional protegendo informações
Criptografia: matemática e lógica computacional protegendo informaçõesCriptografia: matemática e lógica computacional protegendo informações
Criptografia: matemática e lógica computacional protegendo informações
 
Nota de aula seguranca da informacao - criptografia
Nota de aula   seguranca da informacao - criptografiaNota de aula   seguranca da informacao - criptografia
Nota de aula seguranca da informacao - criptografia
 
Criptografia Aplicada
Criptografia AplicadaCriptografia Aplicada
Criptografia Aplicada
 
Criptografia
CriptografiaCriptografia
Criptografia
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with docker
 

Similar to SSH PHP Bibliotecas Autenticação Comandos Transferência

Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
PHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHPPHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHPiMasters
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e MonitorizaçãoSAPO Sessions
 
Aula 4 Mini Curso de Linux
Aula 4 Mini Curso de LinuxAula 4 Mini Curso de Linux
Aula 4 Mini Curso de LinuxRogério Cardoso
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxThiago Paes
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Jonata Weber
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasAlexandro Silva
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrerMichele Silva
 
Alterar password linux user pam autentication
Alterar password linux user   pam autenticationAlterar password linux user   pam autentication
Alterar password linux user pam autenticationCarlos Eduardo
 

Similar to SSH PHP Bibliotecas Autenticação Comandos Transferência (20)

Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Aula20 open vpn
Aula20 open vpnAula20 open vpn
Aula20 open vpn
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
PHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHPPHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHP
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e Monitorização
 
Utilizando o open ssh
Utilizando o open   sshUtilizando o open   ssh
Utilizando o open ssh
 
Aula 4 Mini Curso de Linux
Aula 4 Mini Curso de LinuxAula 4 Mini Curso de Linux
Aula 4 Mini Curso de Linux
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
Linux shell
Linux shellLinux shell
Linux shell
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)
 
Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer
 
Introdução ao Ssh
Introdução ao SshIntrodução ao Ssh
Introdução ao Ssh
 
Alterar password linux user pam autentication
Alterar password linux user   pam autenticationAlterar password linux user   pam autentication
Alterar password linux user pam autentication
 

SSH PHP Bibliotecas Autenticação Comandos Transferência

  • 1. Conexões SSH com PHP Felipe Weckx
  • 2. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 2/15 Agenda ● Para que usar SSH no PHP? ● Bibliotecas disponíveis ● Métodos de autenticação ● Execução de comandos ● Transferência de arquivos
  • 3. ●Para que usar SSH no PHP? PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 3/15 ● Automação! ● Deploy ● Levantamento de dados de servidores ● Execução de rotinas de manutenção ● Start/Stop de serviços ● Monitoramento logs
  • 4. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 4/15 Bibliotecas Disponíveis ● ext/ssh2 – Extensão em C – Somente SSHv2 – Utiliza libssh2 – Instalação no servidor – Procedural ● PHPSecLib – Totalmente em PHP – Suporte SSH v1 e v2 – Fácil de embutir na aplicação – Orientada a Objetos
  • 5. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 5/15 Métodos de Autenticação ● Password – Keyboard-interactive (>= 0.12) ● Chave RSA – Com senha ● Multi-fator ● Sem autenticação
  • 6. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 6/15 Conectando e Autenticando $con = ssh2_connect('ssh.com', 22); //Autenticação por senha if (!ssh2_auth_password($con, 'user', 'pass') { die('Erro no login com senha') } //Autenticação por chave RSA if (!ssh2_auth_pubkey_file($con, 'user','id_rsa.pub', 'id_rsa', 'secret')) { Die('Erro no login com chave'); }
  • 7. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 7/15 Executando Comandos $stream = ssh2_exec($con, $cmd); if (!$stream) { die('Erro ao executar comando'); } stream_set_blocking($stream, true); stream_set_timeout($stream, 15); $result = stream_get_contents($stream); fclose($stream);
  • 8. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 8/15 Considerações ● ssh2_exec Executa um comando simples ● Comandos interativos podem dar problema ● Sempre defina o tempo de timeout
  • 9. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 9/15 Comandos interativos ● Utilizar fwrite e fread ● Enviar o comando com no final n ● Ler e interpretar a resposta ● Enviar próxima informação ● PHPSecLib tem o método read que já suporta expressões regulares
  • 10. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 10/15 Comandos Interativos $ssh = new Net_SSH2($host); if (!$ssh->login($user, $pass)) { exit('Login Failed'); } //Aguarda o prompt $output = $ssh->read('$'); //Executa o comando com sudo $ssh->write("sudo ls -lan"); //Aguarda o prompt da senha e envia a senha $output .= $ssh->read('/[pP]assword[^:]*:/', NET_SSH2_READ_REGEX); $ssh->write("{$pass}n"); //Lê o restante até o próximo prompt $output .= $ssh->read('$');
  • 11. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 11/15 Transferindo Arquivos ● ssh2_scp_send( $con, '/tmp/teste_local.txt', '/tmp/teste_remoto.txt); ● ssh2_scp_recv( $con, '/tmp/teste_remoto.txt', '/tmp/teste_local.txt' );
  • 12. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 12/15 Laravel ● Utiliza PHPSecLib ● Classes de abstração – SSH::into('staging')->run(array( 'cd /var/www', 'git pull origin master', )); ● Envoy Task Runner – @task('deploy', ['on' => ['web-1', 'web-2']]) cd site git pull origin {{ $branch }} php artisan migrate @endtask
  • 13. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 13/15 Segurança ● Nunca manter username e senha no código fonte ● Preferir uso de arquivos de chaves – Trocar as chaves periodicamente ● Log de todas as operações
  • 14. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 14/15 Perguntas?
  • 15. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 15/15 Obrigado Felipe Weckx felipe@weckx.net @weckx github.com/weckx linkedin.com/in/felipeweckx http://blog.weckx.net