package infra import ( "fmt" "os" "path/filepath" ) // SSHConfigWrite escribe la lista de entries al archivo ~/.ssh/config. // Crea un backup (.config.bak) antes de sobrescribir si el archivo ya existe. // Crea el directorio ~/.ssh si no existe. func SSHConfigWrite(entries []SSHConfigEntry) error { sshDir := filepath.Join(os.Getenv("HOME"), ".ssh") configPath := filepath.Join(sshDir, "config") backupPath := filepath.Join(sshDir, "config.bak") if err := os.MkdirAll(sshDir, 0700); err != nil { return fmt.Errorf("ssh config write: create dir: %w", err) } // Backup si existe if data, err := os.ReadFile(configPath); err == nil { if err := os.WriteFile(backupPath, data, 0600); err != nil { return fmt.Errorf("ssh config write: backup: %w", err) } } content := SSHConfigRender(entries) if err := os.WriteFile(configPath, []byte(content), 0600); err != nil { return fmt.Errorf("ssh config write: %w", err) } return nil }