From eae440f41491651bf5ebf1a9f376149244797a66 Mon Sep 17 00:00:00 2001 From: Shazeb Date: Sun, 24 Aug 2025 16:31:20 +0530 Subject: [PATCH] Cancel per-address work after login --- cmd/sshchecker/main.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/cmd/sshchecker/main.go b/cmd/sshchecker/main.go index 521d131..8309fa6 100644 --- a/cmd/sshchecker/main.go +++ b/cmd/sshchecker/main.go @@ -98,21 +98,29 @@ func processFromStdin(ctx context.Context, options *sshchecker.BatchOptions) { output := make(chan *sshchecker.BatchResult) var batchError error + addrCtx, cancel := context.WithCancel(ctx) go func() { - batchError = sshchecker.BatchTrySSHLogin(ctx, addr, options, output) + batchError = sshchecker.BatchTrySSHLogin(addrCtx, addr, options, output) close(output) }() + + success := false for out := range output { if out.Error != nil { - gologger.Warningf("[!] Failed to login on %s with %s:%s, error: %v", - addr.String(), out.Username, out.Password, out.Error) + if !success { + gologger.Warningf("[!] Failed to login on %s with %s:%s, error: %v", + addr.String(), out.Username, out.Password, out.Error) + } continue } - gologger.Infof("[+] Successful login on %s with %s:%s", addr.String(), out.Username, out.Password) - break - + if !success { + gologger.Infof("[+] Successful login on %s with %s:%s", addr.String(), out.Username, out.Password) + cancel() + success = true + } } + cancel() if batchError != nil { gologger.Warningf("[!] Error while batch logging in on %s: %v", addr.String(), batchError)