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

  1. Provide a matching, non-empty password and confirmation when prompted.
  2. 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.
  3. Verify caps-lock / keyboard layout if confirmations keep mismatching interactively.
  4. 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

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


AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12). Data as JSON: /api/errors/d6e134f1374984c7. Report an issue: GitHub.