Como copiar arquivos entre máquinas com ssh e tar
É possível copiar arquivos entre computadores utilizando o scp, utilitário que vem junto ao pacote openssh-client, mas há um problema com cópias deste tipo que é manter as permissões e proprietários originais dos arquivos. Uma forma de contornar estes problema é utilizarmos um recurso do comando ssh que é a execução remota de comandos, durante o pedido de conexão.
Um exemplo deste recurso é o comando a seguir:
ssh usuario@ipremoto "cat /etc/hosts"
Este comando efetuará uma conexão ao ipremoto e executará um comando cat exibindo o conteúdo do arquivo hosts da máquina remota.
Antes de vermos o comando completo para este recurso, vamos ver o funcionamento do comando tar para a execução de um backup. Em seu funcionamento padrão podemos efetuar um backup com este comando:
tar -czpf backup.tar.gz /etc
Será criado um arquivo backup.tar.gz tendo como conteúdo todo o diretório /etc, mantendo as permissões originais de cada arquivo e diretório e preservando usuários e grupos. Este comando pode alterado para:
tar -czpf - /etc
A principal alteração é que o backup do /etc será jogado todo em tela. Pensando nisto podemos achar uma forma de direcionar isto para um arquivo com o uso de ">" ou canalizar a saída deste comando para outro como por exemplo uma descompactação.
Vamos combinar agora o comando ssh para uma conexão com um equipamento remoto e o comando tar para criarmos um backup:
ssh root@ipremoto "tar -czpf /root/backup.tar.gz /etc"
Similar ao primeiro comando tar anterior, este comando criará um arquivo backup.tar.gz no diretório /root. Se tirarmos o destino /root/backup.tgz e jogarmos a saída em tela ( - ) todo o backup poderá ser direcionado para um arquivo local, não mais na máquina remota:
ssh root@ipremoto tar -czpf - /etc > /backup/backup-etc.tar.gz
Deste ponto para que eu obtenha os arquivos localmente, mantendo as caracteríticas orginais bastaria eu descompactar o arquivo e pronto, porém se minha intenção original era a cópia dos arquivos entre máquinas sem ter que criar um backup intermediário para isto, podemos alterar este comando como segue:
ssh root@ipremoto tar -czpf - /etc | tar -xvzpf -
Vejamos como funciona o comando acima:
ssh root@ipremoto
faz a conexão com o servidor remoto, utilizando a conta root para conexão, lembre-se que normalmente o root não pode fazer logon via ssh, altere sua configuração em /etc/ssh/sshd_config ou execute o comando informando um usuário que possa usar o comando sudo. Devemos utilizar o root para conexão para que a cópia não tenha problemas de permissão de leitura.
tar -czpf - /etc
será executado o comando tar compactando a saída (opção z) de todos os arquivos do diretório /etc jogando o resultado na saída padrão (o - isolado antes do diretório).
| tar -xvzpf
o caractere pipeline (|) joga os dados na entrada padrão do comando tar acionada pelo "-" que os recebe, descompactando e gravando no diretório local.
Um efeito colateral deste comando que é muito bom é que a cópia entre os computadores é extremamente mais rápida que a cópia via scp.
0 comentários:
Postar um comentário