mirror of
https://github.com/coollabsio/coolify.git
synced 2026-10-05 21:47:10 -04:00
fix(terminal): preserve PATH for SSH proxy commands (#11638)
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
||||
extractSshArgs,
|
||||
extractTargetHost,
|
||||
extractTimeout,
|
||||
getTerminalProcessEnv,
|
||||
getTerminalSessionTimeout,
|
||||
isAuthorizedTargetHost,
|
||||
sanitizeSshArgs,
|
||||
@@ -401,7 +402,7 @@ async function handleCommand(ws, command, userId) {
|
||||
cols: 80,
|
||||
rows: 30,
|
||||
cwd: process.env.HOME,
|
||||
env: {},
|
||||
env: getTerminalProcessEnv(),
|
||||
};
|
||||
|
||||
// NOTE: - Initiates a process within the Terminal container
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
export const MAX_TERMINAL_SESSION_TIMEOUT_SECONDS = 8 * 60 * 60;
|
||||
|
||||
const DEFAULT_TERMINAL_PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';
|
||||
|
||||
export function getTerminalProcessEnv(environment = process.env) {
|
||||
return {
|
||||
PATH: environment.PATH || DEFAULT_TERMINAL_PATH,
|
||||
};
|
||||
}
|
||||
|
||||
export function getTerminalSessionTimeout() {
|
||||
return MAX_TERMINAL_SESSION_TIMEOUT_SECONDS;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
MAX_TERMINAL_SESSION_TIMEOUT_SECONDS,
|
||||
extractSshArgs,
|
||||
extractTargetHost,
|
||||
getTerminalProcessEnv,
|
||||
getTerminalSessionTimeout,
|
||||
isAuthorizedTargetHost,
|
||||
normalizeHostForAuthorization,
|
||||
@@ -11,6 +12,32 @@ import {
|
||||
validateSshArgs,
|
||||
} from './terminal-utils.js';
|
||||
|
||||
test('getTerminalProcessEnv preserves the PATH needed by SSH proxy commands', () => {
|
||||
assert.deepEqual(getTerminalProcessEnv({
|
||||
PATH: '/usr/local/bin:/usr/bin:/bin',
|
||||
APP_KEY: 'must-not-be-inherited',
|
||||
}), {
|
||||
PATH: '/usr/local/bin:/usr/bin:/bin',
|
||||
});
|
||||
});
|
||||
|
||||
test('getTerminalProcessEnv uses the default PATH when PATH is absent', () => {
|
||||
assert.deepEqual(getTerminalProcessEnv({
|
||||
APP_KEY: 'must-not-be-inherited',
|
||||
}), {
|
||||
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
|
||||
});
|
||||
});
|
||||
|
||||
test('getTerminalProcessEnv uses the default PATH when PATH is empty', () => {
|
||||
assert.deepEqual(getTerminalProcessEnv({
|
||||
PATH: '',
|
||||
APP_KEY: 'must-not-be-inherited',
|
||||
}), {
|
||||
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
|
||||
});
|
||||
});
|
||||
|
||||
test('extractTargetHost normalizes quoted IPv4 hosts from generated ssh commands', () => {
|
||||
const sshArgs = extractSshArgs(
|
||||
"timeout 3600 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR -o ServerAliveInterval=20 -o ConnectTimeout=10 'root'@'10.0.0.5' 'bash -se' << \\\\$abc\necho hi\nabc"
|
||||
|
||||
Reference in New Issue
Block a user