Skip to content

Backup & Restore

Protect your SSH-KLM deployment with comprehensive backup strategies.

ComponentLocationPriority
DatabasePostgreSQLCritical
Configuration/etc/ssh-klm/Critical
Encryption KeysVault/KMSCritical
Agent Backups/var/lib/ssh-klm/backupsHigh
Logs/var/log/ssh-klm/Medium
Terminal window
# Full backup
pg_dump -h localhost -U sshklm -d sshklm_production \
--format=custom \
--file=/backup/sshklm-$(date +%Y%m%d).dump
# Compressed backup
pg_dump -h localhost -U sshklm -d sshklm_production \
| gzip > /backup/sshklm-$(date +%Y%m%d).sql.gz
/opt/scripts/backup-sshklm.sh
#!/bin/bash
BACKUP_DIR="/backup/sshklm"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)
# Create backup directory
mkdir -p $BACKUP_DIR
# Database backup
pg_dump -h localhost -U sshklm -d sshklm_production \
--format=custom \
--file=$BACKUP_DIR/db-$DATE.dump
# Configuration backup
tar -czf $BACKUP_DIR/config-$DATE.tar.gz \
/etc/ssh-klm/ \
/var/lib/ssh-klm/
# Cleanup old backups
find $BACKUP_DIR -type f -mtime +$RETENTION_DAYS -delete
echo "Backup completed: $DATE"
Terminal window
# Daily at 2 AM
0 2 * * * /opt/scripts/backup-sshklm.sh >> /var/log/sshklm-backup.log 2>&1
Terminal window
# Backup configuration
tar -czf sshklm-config-backup.tar.gz \
/etc/ssh-klm/ \
/opt/ssh-klm/.env
# Include Kubernetes secrets (if applicable)
kubectl get secrets -n ssh-klm -o yaml > k8s-secrets-backup.yaml

⚠️ Critical: Without encryption keys, backed-up data cannot be restored.

Terminal window
# Export Vault data (requires root token)
vault operator raft snapshot save vault-snapshot.snap

KMS keys are managed by AWS. Ensure:

  1. Key deletion protection is enabled
  2. Cross-region replica exists
  3. Key policy allows recovery
Terminal window
# Stop SSH-KLM services
sudo systemctl stop ssh-klm
# Restore database
pg_restore -h localhost -U sshklm -d sshklm_production \
--clean --if-exists \
/backup/sshklm-20260106.dump
# Start services
sudo systemctl start ssh-klm
Terminal window
# Restore configuration
sudo tar -xzf sshklm-config-backup.tar.gz -C /
# Verify configuration
sudo ssh-klm config validate
# Restart services
sudo systemctl restart ssh-klm
  1. Provision infrastructure (same or new)
  2. Restore encryption keys to Vault/KMS
  3. Restore database from backup
  4. Restore configuration files
  5. Re-register agents (if needed)
  6. Verify connectivity and data integrity
Terminal window
# Test backup integrity
pg_restore --list /backup/sshklm-20260106.dump
# Verify database consistency
ssh-klm admin db:verify