appsmithorg/appsmith · error · Error
Backup process aborted because a valid encryption password c
Error message
Backup process aborted because a valid encryption password could not be obtained from the user
What it means
Thrown by the EncryptionLink after its interactive prompt loop exhausts without a valid password. The loop rejects an empty password and rejects non-matching confirmations; on exit it logs an abort message and throws, stopping the backup-encryption step so a backup is never written without a usable encryption password.
Source
Thrown at app/client/packages/rts/src/ctl/backup/links/EncryptionLink.ts:79
if (encryptionPwd1 === encryptionPwd2) {
if (encryptionPwd1) {
return encryptionPwd1;
}
console.error(
"Invalid input. Empty password is not allowed, please try again.",
);
} else {
console.error("The passwords do not match, please try again.");
}
}
console.error(
"Aborting backup process, failed to obtain valid encryption password.",
);
throw new Error(
"Backup process aborted because a valid encryption password could not be obtained from the user",
);
}
export async function encryptBackupArchive(
archivePath: string,
encryptionPassword: string,
) {
const encryptedArchivePath = archivePath + ".enc";
await utils.execCommand([
"openssl",
"enc",
"-aes-256-cbc",
"-pbkdf2",
"-iter",
"100000",
"-in",View on GitHub (pinned to 8cd9021c24)
Solutions
- Provide a matching, non-empty password and confirmation when prompted.
- For automation, pipe the password from a secure source using a tty-creating wrapper (e.g. 'script' or 'expect') so the prompt loop receives matching input.
- Verify caps-lock / keyboard layout if confirmations keep mismatching interactively.
- If the flow must run non-interactively, check for an env/file-based password option in the EncryptionLink config and use it instead of the prompt.
Example fix
# before (CI with no TTY -> prompt reads EOF, throws) $ appsmith backup create --encrypt # after $ printf '%s\n%s\n' "$BACKUP_PASS" "$BACKUP_PASS" | script -qc 'appsmith backup create --encrypt' /dev/null
Defensive patterns
Strategy: validation
Validate before calling
function isValidPasswordPair(p: string, confirm: string) {
return Boolean(p) && p === confirm;
} Type guard
const isNonEmptyString = (v: unknown): v is string => typeof v === 'string' && v.length > 0;
Try / catch
try { await runEncryptedBackup(); } catch (e) {
if (/encryption password/i.test(e.message)) { /* surface a non-interactive password source */ }
else throw e;
} Prevention
- Provide matching, non-empty passwords in interactive prompts.
- For automation, pipe credentials via a TTY-creating wrapper.
- Avoid pasting passwords with trailing newlines that mismatch the confirmation.
When it happens
Trigger: Running an encrypted backup where the operator, when prompted twice for a password and confirmation, supplies an empty value or two non-matching values repeatedly until the prompt loop gives up.
Common situations: Non-interactive/CI run where stdin has no TTY so prompts read EOF; operator typing mismatched confirmation; paste of a password with trailing newline differences; automation invoking the ctl without piping a password.
Related errors
- Not enough space available at /appsmith-stacks. Please ensur
- Database URL not found. Please check APPSMITH_DB_URL or APPS
- Redis URL not found. Please check APPSMITH_REDIS_URL configu
- Organization with slug 'default' not found in database
- Could not find the contents of the backup archive.
AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12).
Data as JSON: /api/errors/d6e134f1374984c7.
Report an issue: GitHub.