Transferindo arquivos

O SSH é um verdadeiro canivete suíço. Além de permitir rodar aplicativos e fazer toda a administração de um servidor remotamente, ele também pode ser usado para transferir arquivos. A forma mais básica de fazer isso é usar o sftp, um comando que faz parte do pacote padrão.

Ele oferece uma interface similar à dos antigos programas de FTP de modo texto, mas todos os arquivos transferidos através dele trafegam através de um túnel encriptado, criado através do SSH. Na prática, temos uma espécie de VPN temporária, criada no momento em que é efetuada a conexão. A melhor parte é que o próprio SSH cuida de tudo, não é necessário instalar nenhum programa adicional.

Para se conectar a um servidor usando o sftp, o comando é:

$ sftp usuario@192.168.0.1

Se o servidor ssh na outra ponta estiver configurado para escutar em uma porta diferente da 22, é preciso indicar a porta no comando, incluindo o parâmetro -o port=, como em:

$ sftp -o port=22 morimoto@10.0.0.1

A partir daí você tem um prompt do sftp. Use o comando “put” para dar upload de um arquivo e “get” para baixar um arquivo do servidor para a pasta local. Para navegar entre as pastas do servidor, use os comandos “cd pasta/” (para acessar a pasta), “cd ..” (para subir um diretório), “ls” (para listar os arquivos) e “pwd” (para ver em qual diretório está). Veja um exemplo:

morimoto@athenas:~$ sftp -o port=2222 morimoto@10.0.0.1
Connecting to 10.0.0.1…
Password:

sftp> ls
Desktop Meu Computador OpenOffice.org1.1.1a icones-magicos.deb

sftp> get icones-magicos.deb
Fetching /home/kurumin/icones-magicos.deb to icones-magicos.deb
/home/kurumin/icones-magicos.deb 100% 825KB 825.1KB/s 00:01

sftp> put RealPlayer10GOLD.bin
Uploading RealPlayer10GOLD.bin to /home/kurumin/RealPlayer10GOLD.bin
RealPlayer10GOLD.bin 100% 6726KB 3.3MB/s 00:02

sftp> pwd
Remote working directory: /home/morimoto

Existem ainda os comandos “lcd” (local cd), “lls” (local ls), “lmkdir” (local mkdir) e “lpwd” (local pwd), que permitem mudar o diretório local.

Por exemplo, digamos que você está atualmente no diretório “/mnt/arquivos”. Ao abrir a conexão via sftp, tudo que você baixar será colocado automaticamente neste diretório. Mas, digamos que você queira baixar um determinado arquivo para o diretório “/home/joao”. Você usaria, então, o comando “lcd /home/joao” para mudar o diretório local e depois o “get arquivo” para baixá-lo já na pasta correta. Na hora de dar upload de um arquivo é a mesma coisa. Você pode usar o “lpwd” para listar os arquivos no diretório local e depois o “put arquivo” para dar upload.

Naturalmente, existem meios mais práticos de fazer isso, usando programas gráficos que suportam o sftp. O mais usado, neste caso, é o konqueror. Ele possui um módulo chamado “fish://”, que permite acessar servidores remotos e transferir arquivos simplesmente arrastando-os para outra janela.

Acesse o endereço desejado através da própria barra de endereços, incluindo o login de acesso, como em” fish://kurumin@192.168.0.1“. Você pode também especificar diretamente uma pasta no servidor remoto que quer acessar (por padrão você cai na pasta home), como em: fish://kurumin@192.168.0.1/mnt/arquivos/.

Para tornar as coisas mais práticas, eu uso o recurso de dividir a janela em duas, que você encontra no Janela > Separar visão em topo/base. Assim, fico com uma janela mostrando os arquivos locais e outra mostrando os arquivos do servidor, e posso simplesmente arrastar os arquivos que devem ser transferidos.

Uma forma mais primitiva de transferir arquivos via SSH é usar o “scp“, que permite especificar em uma única linha o login e endereço do servidor, junto com o arquivo que será transferido. Graças a isso, ele é muito usado em scripts. A sintaxe do scp é: “scp arquivo_local login@servidor:pasta_remota“, como em:

$ scp /home/arquivo.tar usuario@empresa.com.br:/var/www/download

Você pode adicionar também as opções “-p” (que preserva as permissões de acesso além das datas de criação e modificação do arquivo original), “-r” (que permite copiar pastas, recursivamente), “-v” (verbose, onde são mostradas todas as mensagens) e “-C” (que ativa a compressão dos dados, ajuda muito na hora de transferir grandes arquivos via internet). Nesse caso, o comando ficaria:

$ scp -prvC /home/arquivo.tar usuario@empresa.com.br:/var/www/download

Ao incluir a opção “-r“, você pode especificar diretamente uma pasta no primeiro parâmetro. Esta opção é interessante para backups.

O SSH pode ser ainda usado como “meio de transporte” por outros programas. Por exemplo, o rsync é um comando que permite sincronizar uma pasta local com uma pasta do servidor (para fazer backup, por exemplo). Ele é capaz inclusive de consertar arquivos danificados e dar upload de atualizações, enviando apenas as partes dos arquivos que forem diferentes, o que torna a transferência muito mais rápida.

Para instalar o rsync no Debian, use o comando “apt-get install rsync”. Não vou falar muito sobre o rsync em si, pois a idéia é só dar mais um exemplo de como ele poderia ser usado em conjunto com o SSH.

O uso básico do rsync, para sincronizar duas pastas locais seria “rsync -a origem/ destino/”. A pasta destino poderia ser um segundo HD, um cartão de memória ou um compartilhamento de rede, por exemplo.

Para usar o rsync via SSH, o comando acaba sendo bem mais complexo, mas o resultado é bem interessante. Ele vai apenas atualizar as partes dos arquivos que forem modificadas, sem dar upload dos arquivos inteiros novamente, como muitos programas de backup fariam.

Para sincronizar a pasta local “/home/joao” com a pasta remota “/backup“, no servidor 64.246.47.76 (onde seria feito um backup dos arquivos locais), usando o login “joao“, por exemplo, tudo via SSH, o comando seria:

$ rsync -av –rsh=”ssh -l joao” /home/joao/ joao@64.246.47.76:/backup

Para recuperar posteriormente o backup no caso de um desastre, baixando os arquivos salvos no servidor bastaria inverter a ordem dos diretórios no comando:

$ rsync -av –rsh=”ssh -l joao joao@64.246.47.76:/backup /home/joao/

No primeiro comando os arquivos da pasta “/home/joao” vão para a pasta /backup do servidor e no segundo eles são recuperados, subscrevendo os arquivos locais. A parte mais significativa deste comando é o parâmetro “–rsh=”ssh -l joao“, que diz para o rsync usar um programa externo (o SSH) para fazer o trabalho.

Uma observação é que usando apenas os parâmetros “-av”, o rsync apenas atualiza e grava novos arquivos na pasta do servidor, sem remover arquivos que tenham sido deletados na pasta local. Por um lado isto é bom, pois permite recuperar arquivos deletados acidentalmente, mas por outro pode causar confusão. Se você preferir que os arquivos que não existem mais sejam deletados ao atualizar o backup, adicione o parâmetro “–delete”, como em:

$ rsync -av –delete –rsh=”ssh -l joao” /home/joao/ joao@64.246.47.76:/backup

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X