fix(sftp-repo): password request prompted in console

This commit is contained in:
Nicolas Meienberger 2026-01-24 23:03:54 +01:00
parent 458799297d
commit 16ac608d46
3 changed files with 23 additions and 6 deletions

View file

@ -120,7 +120,7 @@ const createRepository = async (name: string, config: RepositoryConfig, compress
error = result.error; error = result.error;
} else { } else {
const initResult = await restic.init(encryptedConfig, organizationId); const initResult = await restic.init(encryptedConfig, organizationId, { timeoutMs: 20000 });
error = initResult.error; error = initResult.error;
} }

View file

@ -185,11 +185,27 @@ export const buildEnv = async (config: RepositoryConfig, organizationId: string)
const sshArgs = [ const sshArgs = [
"-o", "-o",
"LogLevel=VERBOSE", "LogLevel=ERROR",
"-o", "-o",
"ServerAliveInterval=60", "BatchMode=yes",
"-o", "-o",
"ServerAliveCountMax=240", "NumberOfPasswordPrompts=0",
"-o",
"PreferredAuthentications=publickey",
"-o",
"PasswordAuthentication=no",
"-o",
"KbdInteractiveAuthentication=no",
"-o",
"IdentitiesOnly=yes",
"-o",
"ConnectTimeout=10",
"-o",
"ConnectionAttempts=1",
"-o",
"ServerAliveInterval=10",
"-o",
"ServerAliveCountMax=3",
"-i", "-i",
keyPath, keyPath,
]; ];
@ -227,7 +243,7 @@ export const buildEnv = async (config: RepositoryConfig, organizationId: string)
return env; return env;
}; };
const init = async (config: RepositoryConfig, organizationId: string) => { const init = async (config: RepositoryConfig, organizationId: string, options?: { timeoutMs?: number }) => {
const repoUrl = buildRepoUrl(config); const repoUrl = buildRepoUrl(config);
logger.info(`Initializing restic repository at ${repoUrl}...`); logger.info(`Initializing restic repository at ${repoUrl}...`);
@ -237,7 +253,7 @@ const init = async (config: RepositoryConfig, organizationId: string) => {
const args = ["init", "--repo", repoUrl]; const args = ["init", "--repo", repoUrl];
addCommonArgs(args, env, config); addCommonArgs(args, env, config);
const res = await exec({ command: "restic", args, env }); const res = await exec({ command: "restic", args, env, timeout: options?.timeoutMs ?? 20000 });
await cleanupTemporaryKeys(env); await cleanupTemporaryKeys(env);
if (res.exitCode !== 0) { if (res.exitCode !== 0) {

View file

@ -53,6 +53,7 @@ export const safeSpawn = (params: SafeSpawnParams) => {
const child = spawn(command, args, { const child = spawn(command, args, {
env: { ...process.env, ...env }, env: { ...process.env, ...env },
signal: signal, signal: signal,
stdio: ["ignore", "pipe", "pipe"],
}); });
child.stdout.setEncoding("utf8"); child.stdout.setEncoding("utf8");