Olá pessoal, no post anterior nós vimos como trocar arquivos entre servidores via SSH, esse post explica como copiar/enviar arquivos usando o SSH do PHP.
Pode ser utilizado para diversos fins, eu utilizo junto com um script de backup onde eu gerencio e copio meus backups para outro servidor, tudo pelo PHP.
A versão do PHP utilizada nesse post é a 5.5, a distribuição linux pode ser qualquer uma, mas estou utilizando o Ubuntu Server 14.04. Como arquivos e bibliotecas extras, temos o php5-dev e php-pear instalados, o servidor linux precisa ter instalado a biblioteca libssh2 >= 1.2.
Bom, vamos lá!
Vamos começar com a instalação do PEAR (PHP Extension and Aplication Repository – plataforma e um sistema de distribuição para a codificação de componentes em PHP) e PECL (PHP Extension Community Library – extensões em C para compilação no PHP) e a biblioteca libssh2.
~# apt-get install libssh2-1 libssh2-1-dev php5-dev php-pear
Agora vamos instalar o componente que será responsável pela comunicação do PHP com o SSH client do seu servidor.
~# pecl install ssh2-beta
Essa instalação vai criar a extensão do ssh2.so do e PHP e precisaremos habilitá-la.
Primeiro precisamos ir até o diretório onde ficam os módulos disponíveis do PHP
~# cd /etc/php5/mods-available
Vamos criar um arquivo chamado ssh2.ini com o conteúdo listado abaixo.
~# vim ssh2.ini
extension=ssh2.so
Vamos habilitar o módulo e reiniciar o servidor web.
~# php5enmod ssh2
~# service apache2 restart
Agora vamos ao nosso script em PHP usando o SSH, no cenário a seguir.
Servidor1 – É o nosso servidor onde está rodando o PHP.
Servidor2 – Servidor para onde jogaremos os arquivos, chamarei de S2.
S2 tem o endereço IP 192.168.1.20, usuário de acesso ‘rodrigo’ e a senha ‘123456’.
Crie o arquivo ssh.php com o seguinte conteúdo.
serverHost = '192.168.1.20'; $serverUser = 'rodrigo'; $serverPass = '123456'; $arquivoLocal = '/home/rodrigo/backup/sistemas.tar.gz'; $arquivoRemoto = '/home/rodrigo/sistemas.tar.gz';/* Faz a conexão com o servidor remoto */ if (!$ssh = @ssh2_connect($serverHost, 22)) { echo "Erro ao se conectar com o servidor...\n"; exit(); }
/* Faz a autenticação no servidor remoto */ if (!@ssh2_auth_password($ssh, $serverUser, $serverPass)) { echo "Erro ao efetuar autenticação no servidor remoto...\n"; exit(); }
/* Cria um diretório de backup se não existir */ if (!@ssh2_sftp_mkdir($ssh, '/home/rodrigo/backup')) { echo "Diretório já existe...\n"; // Não coloquei 'exit()' porque o script não deve terminar caso retorne o erro }
/** * Copia o arquivo do servidor local para o servidor remoto. * As permissões são opcionais */ if (!@ssh2_scp_send($ssh, $arquivoRemoto, $arquivoLocal, 0644)) { echo "Erro ao enviar o arquivo para o servidor ...\n"; exit(); }
/** * Copia do servidor remoto para o local */ if (!@ssh2_scp_recv($ssh, $arquivoRemoto, $arquivoLocal)) { echo "Erro ao receber o arquivo do servidor ...\n"; exit(); }
Bem, como vocês podem ver, é bem fácil trabalhar com SSH no PHP.
Pode também ser utilizado como uma simples troca de arquivos, como backup diário, distribuição remota de arquivos, etc.
Se você quiser saber mais sobre outras funções SSH do PHP, consulte a documentação em http://br.php.net/manual/en/book.ssh2.php
Um abraço e até a próxima.