Quero fazer backups regulares e automatizados para um Raspberry Pi na minha rede doméstica. Basta fazer backups, quando estiver em casa.
Cada guia que li sobre 'como fazer backups automatizados' me diz para colocar uma chave ssh sem senha no meu pi. Não quero fazer isso, porque qualquer pessoa com acesso ao meu pc teria acesso aos meus backups, o que aniquila completamente o propósito dos backups.
Minha solução atual é uma chave ssh protegida por senha e um script rsync. Demorou algum tempo para que funcionasse, mas agora a senha é solicitada assim que faço login na minha rede doméstica, seguida de um backup.
Agora quero usar restic
, pois preciso de algum tipo de backup versionado. Também quero fazer backup de outros dispositivos. O guia restic novamente me diz para usar uma chave ssh sem senha.
Agora tive a ideia de fazer o contrário. Ou seja, meu pi (offline) pode fazer ssh em meu laptop sem senha (mas com resric
uso restrito). Eu poderia executar algum systemd.timer com um script que verifica se meu laptop está acessível e iniciar um backup, se for o caso.
No entanto, isso parece bastante hackeado e estou convencido de que este é um cenário comum. Mas não consigo encontrar nenhum guia para isso.
Você pode me indicar uma direção geral? Até alguma terminologia ajudaria, para que eu possa encontrar mais informações sobre o que quero fazer!
A combinação
restic
comrclone
permite que você configure um serviço em um servidor de backup usandorclone
umarestic
API REST querestic
pode se conectar a partir das máquinas das quais você deseja fazer backup. Usar a API REST geralmente é muito mais rápido do que usarrestic
SFTP.Isso está bem documentado por
rclone serve restic --help
, incluindo como usar SSL e como fazerhtpasswd
autenticação. Você deve ler essa documentação com atenção . Se o seu servidor de backup for público (não deveria ser), ou se você fizer isso para alguma configuração não pessoal, será necessário protegê-lo com alguma forma de autenticar usuários individuais.O mínimo necessário para configurá-lo para poder ser usado fora de
localhost
uma rede local é o seguinte no host que serve como servidor de backup:Aqui
/var/backup/restic
está o caminho no qual você deseja armazenar seusrestic
repositórios (o usuário que executa o comando acima precisa ter permissões de gravação lá, então você pode querer criar um usuário de serviço dedicado para isso). O--addr :8080
meio significa "ligar à porta 8080 em todas as interfaces disponíveis" (por padrão,rclone
liga-se apenas alocalhost:8080
).Você pode então se conectar a isso com o seguinte (isso inicializa um
restic
repositório e cria o primeiro instantâneo do meu diretório pessoal):Isso pressupõe que você deseja criar e usar um
restic
repositório chamadotestrepo
e que seu servidor de backup esteja acessível comobackupsrv
. Você deve substituir esse nome de host pelo nome ou número IP correto.Isso solicitará interativamente a senha do repositório, mas obviamente você pode passá-la na
RESTIC_PASSWORD
variável de ambiente como de costume (assim como você pode passar orestic
repositórioRESTIC_REPOSITORY
em vez de usar-r ...
).No meu Synology NAS pessoal, executo o seguinte contêiner Docker (este é um
docker-compose.yml
arquivo):Isso atende a
restic
API REST na porta 18080 no NAS e me permite armazenar meus backups/volume1/Restic/backup
(por meio de uma montagem vinculada no contêiner). Observe que a segurança narclone
configuração é mínima, pois este é um NAS pessoal em uma LAN isolada (atrás de um firewall e de um NAT de nível de operadora).A ideia é ter uma chave sem senha restrita a operações específicas.
Por exemplo, com Restic (que aparentemente armazena backups via SFTP) ou com rsync simples, você pode fazer com que o servidor de backup mantenha instantâneos Btrfs/ZFS do disco de backup, com a chave SSH acessando uma conta sem privilégios de root (e, portanto, sem nenhuma maneira para excluir instantâneos). Se alguém usar a chave para excluir remotamente o repositório Restic, levará alguns segundos para restaurá-lo do último instantâneo e então você prosseguirá com a restauração do laptop normalmente.
Com programas como o Borg Backup, que possuem seu próprio "servidor" com o qual conversam por SSH, você pode restringir a chave apenas a um comando remoto forçado específico, de modo que tudo o que ele pode fazer é iniciar o servidor Borg e não o SFTP nem um shell . Borg tem uma opção "somente anexar" que você pode usar no comando forçado, tornando a chave utilizável apenas para fazer upload de novos backups, mas não para excluir os antigos.
Indiscutivelmente, no entanto, se alguém 1) tiver acesso aos arquivos não criptografados do seu laptop e 2) estiver conectado à sua rede doméstica, provavelmente você terá problemas maiores...
A primeira afirmação está correta, mas deixe-me tentar explicar o que entendo por isso. (Além de lidar com o princípio do menor privilégio.)
A solução aqui é conduzir os backups do servidor de backups (seu Pi) e não do seu PC. Se você for usar
rsync
(ssh
para um cliente Linux/Mac) ou comrsyncd
(um cliente Windows), você configura o esquema para que o Pi possa acessar o PC. (O PC não precisa ter acesso sem senha ao Pi.)Uma abordagem típica pode ser usar
cron
o Pi para tentar fazer backup do PC com frequência (a cada quatro horas, digamos), mas depois de conseguir, não tente novamente até o dia seguinte. Este script não foi testado, mas deve fornecer a base para uma solução. É importante observar quetimeout 4h
deve ser suficiente para um backup completo: