PostHeaderIcon Rsync funciona com o SSH em uma porta diferente da 22?

O rsync é uma ferramenta extremamente útil e bastante utilizada por diversos administradores de sistemas Unix/Linux e até mesmo por usuários mais avançados. O próprio nome do utilitário já se confunde com a função de sincronizar arquivos e diretórios. Basicamente, quando se deseja utilizar essa ferramenta para sincronizar arquivos entre máquinas distintas, existem duas maneiras básicas e mais comuns: ou por meio de um daemon rsync que deve estar sendo executado na máquina onde se deseja sincronizar os arquivos; ou através do popular servidor SSH. Como a última alternativa já se aproveita de um serviço de acesso remoto seguro, presente na grande maioria das máquinas que possui Unix e/ou alguma distribuição GNU/Linux, essa pode ser a maneira mais prática.

Por exemplo, suponha que você deseje sincronizar o conteúdo do diretório /home/jansen/docs com o diretório /home/bkp/jansen que fica na máquina chamada aragorn.jsena.com.br. Considerando que existe um usuário chamado jsena no host aragorn.jsena.com.br e um servidor SSH, basta utilizar o seguinte comando para realizar essa tarefa:

$ rsync -avz /home/jansen/docs jsena@aragorn.jsena.com.br:/home/jsena/bkp

Simples, não? É claro que existem outras opções do rsync bastante úteis e que podem ser consideradas para fazer operações de sincronismo mais customizadas e específicas. Normalmente, o SSH irá solicitar a senha para autenticar o usuário jsena no host aragorn.jsena.com.br. Entretanto, caso seja de seu interesse executar esse sincronismo automaticamente, sem a necessidade de inserção de senha, basta gerar um par de chaves com o aplicativo ssh-keygen e transferir a chave pública do usuário (criada normalmente com o nome de id_pub.dsa ou id_pub.rsa) em seu computador local para o arquivo /home/jsena/.ssh/authorized_keys. Mas, isso é assunto para outra oportunidade. A questão aqui é tratar do seguinte problema: como fazer o rsync funcionar por meio do SSH se esse servidor não estiver sendo executado em sua porta TCP padrão, a 22?

Antes que você possa se perguntar: “afinal de contas, por que utilizar o SSH em uma porta diferente da padrão?”, aí vai uma rápida explicação. Sempre coloco esse serviço para executar em outras portas, diferentes da padrão por questões de segurança e de hábito. Isso não representa muita segurança (e uma melhor solução seria utilizar o SPA, Single Packet Authorization). Po outro lado, quando isso não é aplicável, essa medida pode, ao menos, desviar a atenção principalmente dos atacantes e/ou curiosos menos experientes. O problema é que o rsync não possui um parâmetro do tipo “port” ou “-p” para se indicar a utilização de uma outra porta quando o SSH está sendo utilizado para o sincronismo de arquivos. A solução é, por outro lado, bastante simples. Tomando como base o exemplo apresentado e supondo que o servidor SSH no host aragorn.jsena.com.br esteja funcionando na porta 22119, basta executar o comando anterior da seguinte maneira:

$ rsync -avz -e 'ssh -p 22119' /home/jansen/docs \
      jsena@aragorn.jsena.com.br:/home/jsena/bkp

Pronto. O problema está resolvido!

Leave a Reply