From 179acc138281f693705a11f3a56bccfe95c881a6 Mon Sep 17 00:00:00 2001 From: Eugene Pankov <john.pankov@gmail.com> Date: Wed, 26 Aug 2020 10:54:49 +0200 Subject: [PATCH] only use pageant as agent if it's runing - fixes #2935, fixes #2936 --- terminus-ssh/src/services/ssh.service.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/terminus-ssh/src/services/ssh.service.ts b/terminus-ssh/src/services/ssh.service.ts index 74e6e548..3a8b48ec 100644 --- a/terminus-ssh/src/services/ssh.service.ts +++ b/terminus-ssh/src/services/ssh.service.ts @@ -18,6 +18,10 @@ import { SSHTabComponent } from '../components/sshTab.component' const WINDOWS_OPENSSH_AGENT_PIPE = '\\\\.\\pipe\\openssh-ssh-agent' +try { + var windowsProcessTreeNative = require('windows-process-tree/build/Release/windows_process_tree.node') // eslint-disable-line @typescript-eslint/no-var-requires, no-var +} catch { } + @Injectable({ providedIn: 'root' }) export class SSHService { private logger: Logger @@ -193,7 +197,14 @@ export class SSHService { if (await fs.exists(WINDOWS_OPENSSH_AGENT_PIPE)) { agent = WINDOWS_OPENSSH_AGENT_PIPE } else { - agent = 'pageant' + const pageantRunning = new Promise<boolean>(resolve => { + windowsProcessTreeNative.getProcessList(list => { // eslint-disable-line block-scoped-var + resolve(list.some(x => x.name === 'pageant.exe')) + }, 0) + }) + if (pageantRunning) { + agent = 'pageant' + } } } else { agent = process.env.SSH_AUTH_SOCK as string