Repository remote adalah inti strategi off-site: backup dikirim ke host lain lewat SSH dengan borg serve. Episode ini mengajarkan setup repo jarak jauh, pasangan SSH key dengan restricted command, menjalankan borg serve tanpa shell penuh, dan praktik keamanan: dedicated user, tanpa password, dan sandboxing seccomp bawaan Borg.

Sejauh ini repository selalu lokal di server yang sama dengan data. Itu melindungi dari kesalahan manusia, tetapi tidak dari kebakaran ruangan server — prinsip 3-2-1 mengharuskan satu salinan off-site. Episode 11 memindahkan repository ke host terpisah lewat SSH. Di sini keamanan menjadi fokus: kalian tidak akan memberi akses shell penuh ke host backup.
Repository remote ditulis sebagai user@host:path:
borg@backup-host:/srv/borg/backupBorg mendeteksi pola user@host: dan otomatis memakai SSH. Di sisi server, Borg memanggil borg serve — sebuah daemon yang dibuka lewat SSH untuk melayani permintaan backup. Klien dan server tidak menyalin file mentah; mereka bertukar chunk lewat protokol Borg.
Di host backup, buat user khusus dan install borg:
sudo useradd -m -s /usr/bin/bash borg
sudo apt install -y borgbackup
sudo mkdir -p /srv/borg
sudo chown borg: /srv/borgPerhatikan: user borg bukan superuser, dan hanya menguasai /srv/borg. Prinsipnya: jauhkan akses backup dari akses administrasi.
Dari sisi klien:
ssh-keygen -t ed25519 -f ~/.ssh/id_borg -N "" -C "borg-backup"
ssh-copy-id -i ~/.ssh/id_borg.pub borg@backup-hostNamun ssh-copy-id menambahkan key dengan akses penuh. Kita ganti dengan restricted command.
Restricted command membatasi SSH hanya menjalankan perintah tertentu — di sini borg serve dengan pembatasan path:
command="borg serve --restrict-to-path /srv/borg --restrict-to-repository /srv/borg/backup",restrict,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... borg-backupMari bedah opsinya:
command="borg serve ..." — SSH hanya akan menjalankan borg serve, apa pun yang diminta klien. Tidak ada shell.--restrict-to-path /srv/borg — borg serve hanya mengakses /srv/borg, tidak dapat menyentuh file lain di sistem.--restrict-to-repository /srv/borg/backup — hanya satu repository yang bisa dilayani.restrict — menonaktifkan port forwarding, agent forwarding, dan X11 forwarding.no-pty — tanpa pseudo-terminal (tidak relevan untuk borg serve, tetapi prinsip keamanan yang baik).Important
Tanpa command= di authorized_keys, SSH key memberi akses shell penuh ke user borg. Kalau key itu bocor, penyerang mendapat shell di host backup. Restricted command menutup pintu itu: penyerang hanya bisa memakai borg serve dalam batas path.
export BORG_REPO='borg@backup-host:/srv/borg/backup'
export BORG_RSH='ssh -i ~/.ssh/id_borg'
export BORG_PASSCOMMAND='cat /root/.borg-passphrase'
borg init --encryption=repokey-blake2Catatan BORG_RSH: memberitahu Borg perintah SSH mana yang dipakai, termasuk file key. Tanpa ini, Borg memakai ssh default yang mungkin tidak memakai id_borg.
borg create --stats "$BORG_REPO"::"{hostname}-{now}" /home /etcKarena BORG_REPO sudah di-export, perintah di atas tidak perlu menulis path penuh. Borg akan membuka SSH, server menjalankan borg serve, dan chunk terkirim.
Gunakan user khusus (borg) — bukan root, bukan user aplikasi. Jika host backup dibobol lewat jalur ini, dampaknya terbatas pada repository.
borg tidak punya password: sudo passwd -l borg.command= authorized_keys.Saat borg serve berjalan, Borg memanfaatkan seccomp (Secure Computing Mode) di Linux untuk menyandbox syscall yang boleh dilakukan proses server. Ini lapisan pertahanan jika borg serve diserang lewat data repo yang jahat — kemampuannya dibatasi pada syscall yang benar-benar dibutuhkan backup. Kalian tidak perlu melakukan apa-apa: aktif secara default pada platform yang didukung.
Tip
Verifikasi setup dengan uji cepat dari klien: borg list harus menampilkan repository, dan ssh borg@backup-host id harus menolak (karena restricted command menolak perintah selain borg serve). Kalau id berjalan, konfigurasi authorized_keys kalian salah.
BORG_RSH: Borg memakai SSH default, gagal karena key tidak ditemukan atau key lain dipakai.borg serve menolak akses.borg list dari host lain untuk memastikan restricted command berfungsi seperti harapan.user@host:path dan dilayani borg serve.command="borg serve --restrict-to-path ..." di authorized_keys.restrict, no-pty mematikan fitur SSH yang tidak perlu.borg tanpa password membatasi dampak bila terjadi kebobolan.borg list sukses, ssh ... id ditolak.Di episode 12 kita menjaga kesehatan jangka panjang: check & maintenance — borg check untuk konsistensi, borg check --verify-data untuk verifikasi isi, jadwal bulanan, borg compact, review log, dan pemantauan kesehatan disk.