Conexões SSH com PHP

764 visualizações

Publicada em

Apresentação feita na PHP Conference 2014 sobre a utilização do PHP para conexões SSH com outros equipamentos. Comparação entre as bibliotecas disponíveis e casos de uso.

Publicada em: Software
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
764
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Conexões SSH com PHP

  1. 1. Conexões SSH com PHP Felipe Weckx
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 14. PHP Conference 2014 Conexões SSH com PHP Felipe Weckx 14/15 Perguntas?
  15. 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

×