Last active
February 9, 2026 04:25
-
-
Save everaldo/8067beae0310e2eeea465e0a8d5d7678 to your computer and use it in GitHub Desktop.
Backup em rede local com container Docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # se o cliente for Mac, garanta que rsync está atualizado, o que vem por padrão no Mac é antigo | |
| brew install rsync | |
| # <CHAVE_PRIVADA> - por padrão é ~/.ssh/id_ed25519 | |
| # <PORT> - por padrão é 22, mas no outro arquivo estamos usando 2222 | |
| # --info=progress2 - só existe na versão nova do rsync, não na padrão do mac, atualize com brew (veja acima) | |
| # <IP_MAQUINA> - IP da máquina que está rodando o servidor de SSH | |
| # <DESTINO_DIR> - diretório onde vai salvar | |
| # Note que a IA sugeriu adicionar esses diretórios --exclude, para evitar arquivos de cache, como node_modules, __pycache__ | |
| # se quiser copiar tudo, sem exceção, remova essas linhas | |
| rsync -avh --info=progress2 \ | |
| --partial --append-verify \ | |
| --exclude node_modules \ | |
| --exclude .venv \ | |
| --exclude __pycache__ \ | |
| --exclude .pytest_cache \ | |
| --exclude dist \ | |
| --exclude build \ | |
| --exclude .mypy_cache \ | |
| --exclude .bundle \ | |
| --exclude vendor/bundle \ | |
| --exclude tmp \ | |
| --exclude log \ | |
| --exclude .DS_Store \ | |
| -e "ssh -i <CHAVE_PRIVADA> -o IdentitiesOnly=yes -p <PORT>" \ | |
| backup@<IP_MAQUINA>:/data/ \ | |
| ~/<DESTINO_DIR>/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Everaldo Gomes 09/02/2026 | |
| # Esta imagem é baseada em Alpine Linux, mas não vem com rsync instalado | |
| # Construa a imagem com este comando: docker build -t openssh-rsync . | |
| # openssh-rsync - o nome da imagem, é apenas um thin wrapper sobre openssh-server, instalando rsync lá dentro | |
| FROM linuxserver/openssh-server:latest | |
| RUN apk add --no-cache rsync |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # --rm - remove o container após terminar | |
| # -d - detached - roda em background - não trava o shell esperando o fim | |
| # wsl_ssh_push - o nome do container | |
| # Porta 2222 para não conflitar, caso exista servidor ssh na porta 22 | |
| # <dir_path> o diretório que você quer montar | |
| # <pub_key_file> o caminho para sua chave pública | |
| # backup - o nome do usuário do container | |
| # PUBLIC_KEY_FILE - acho que não funciona sozinha, melhor montar em /config/.ssh/authorized_keys, por padrão - COMENTADO | |
| # PUID e PGID - geralmente, o primeiro usuário de uma máquina tem id 1000, mas pode conferir em /etc/passwd, o seu ID e GID | |
| # openssh-rsync - o nome da imagem que você construiu com o Dockerfile acima | |
| docker run --rm -d --name wsl_ssh_push \ | |
| -p 2222:2222 -v <dir_path>:/data \ | |
| -v <pub_key_file>:/config/.ssh/authorized_keys:ro \ | |
| -e USER_NAME=backup \ | |
| -e PASSWORD_ACCESS=false \ | |
| # -e PUBLIC_KEY_FILE=/config/authorized_keys:ro \ | |
| -e PUID=1000 \ | |
| -e PGID=1000 \ | |
| -e TZ=America/Sao_Paulo\ | |
| openssh-rsync |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Este comando é bem útil, foi usado no wsl_ssh_push original, mas pode ser usado em | |
| # qualquer container, para descobrir qual o Sistema Operacional | |
| # É uma cascata de comandos || true garante executar o próximo comando | |
| # No nosso caso, descobrimos que a imagem base é construída sobre Alpine Linux, então usamos apk para instalar pacotes | |
| docker exec -it wsl_ssh_push sh -lc 'cat /etc/os-release || true ; command -v apk || true; command -v apt-get || true ; command -v dnf || true ; command -v yum || true' | |
| # Se quiser gerar uma chave SSH nova para esta operação, garantindo a segurança na transmissão e no acesso | |
| ssh-keygen -t ed25519 -C "seuemail@exemplo.com" | |
| # Gera um par de chaves, cuidado pra não sobreescrever as existentes. Lembre-se a chave privada você nunca compartilha com terceiros, neste | |
| # caso você compartilha ela com o PC que vai acessar o backup | |
| # ssh com -vvv faz um super debug, para encontrar erros. IdentitiesOnly é para logar somente com chaves privadas -p é a porta | |
| ssh -vvv -i .ssh/id_ed25519 -o IdentitiesOnly=yes -p 2222 backup@<IP_DA_MAQUINA> | |
| # ver os logs do container, que foi nomeado como wsl_ssh_push | |
| docker logs --tail=200 wsl_ssh_push | |
| # cada vez que você cria o container, muda a assinatura do host, então eu prefiro deletar o arquivo inteiro known_hosts se eu | |
| # me conectei nele | |
| rm ~/.ssh/known_hosts |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment