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