@@ -307,3 +307,123 @@ func TestDefaultWorkDirFallback(t *testing.T) {
307307
308308 assert .Equal (t , expected , strings .TrimSpace (string (output )))
309309}
310+
311+ func TestAgentForwardingDisabled (t * testing.T ) {
312+ t .Parallel ()
313+
314+ signer , pubKey := generateTestKeyPair (t )
315+ _ , addr := startTestServerWithConfig (t , Config {
316+ Port : 0 ,
317+ AuthorizedKeys : []ssh.PublicKey {pubKey },
318+ Env : []string {"PATH=/usr/bin:/bin" },
319+ DefaultUID : uint32 (os .Getuid ()),
320+ DefaultGID : uint32 (os .Getgid ()),
321+ DefaultUser : "testuser" ,
322+ DefaultHome : os .TempDir (),
323+ DefaultShell : "/bin/sh" ,
324+ AgentForwarding : false ,
325+ Logger : slog .Default (),
326+ })
327+
328+ client := dialSSH (t , addr , signer )
329+
330+ // Request agent forwarding — should be rejected.
331+ ok , _ , err := client .SendRequest ("auth-agent-req@openssh.com" , true , nil )
332+ require .NoError (t , err )
333+ assert .False (t , ok , "agent forwarding should be rejected when disabled" )
334+ }
335+
336+ func TestAgentForwardingEnabled (t * testing.T ) {
337+ t .Parallel ()
338+
339+ signer , pubKey := generateTestKeyPair (t )
340+ _ , addr := startTestServerWithConfig (t , Config {
341+ Port : 0 ,
342+ AuthorizedKeys : []ssh.PublicKey {pubKey },
343+ Env : []string {"PATH=/usr/bin:/bin" },
344+ DefaultUID : uint32 (os .Getuid ()),
345+ DefaultGID : uint32 (os .Getgid ()),
346+ DefaultUser : "testuser" ,
347+ DefaultHome : os .TempDir (),
348+ DefaultShell : "/bin/sh" ,
349+ AgentForwarding : true ,
350+ Logger : slog .Default (),
351+ })
352+
353+ client := dialSSH (t , addr , signer )
354+
355+ // Request agent forwarding — should be accepted.
356+ ok , _ , err := client .SendRequest ("auth-agent-req@openssh.com" , true , nil )
357+ require .NoError (t , err )
358+ assert .True (t , ok , "agent forwarding should be accepted when enabled" )
359+ }
360+
361+ func TestAgentSocketCreated (t * testing.T ) {
362+ t .Parallel ()
363+
364+ signer , pubKey := generateTestKeyPair (t )
365+ _ , addr := startTestServerWithConfig (t , Config {
366+ Port : 0 ,
367+ AuthorizedKeys : []ssh.PublicKey {pubKey },
368+ Env : []string {"PATH=/usr/bin:/bin" },
369+ DefaultUID : uint32 (os .Getuid ()),
370+ DefaultGID : uint32 (os .Getgid ()),
371+ DefaultUser : "testuser" ,
372+ DefaultHome : os .TempDir (),
373+ DefaultShell : "/bin/sh" ,
374+ AgentForwarding : true ,
375+ Logger : slog .Default (),
376+ })
377+
378+ client := dialSSH (t , addr , signer )
379+
380+ // Request agent forwarding.
381+ ok , _ , err := client .SendRequest ("auth-agent-req@openssh.com" , true , nil )
382+ require .NoError (t , err )
383+ require .True (t , ok )
384+
385+ // Run a command that checks if SSH_AUTH_SOCK is set.
386+ session , err := client .NewSession ()
387+ require .NoError (t , err )
388+ defer func () { _ = session .Close () }()
389+
390+ output , err := session .CombinedOutput ("echo $SSH_AUTH_SOCK" )
391+ require .NoError (t , err )
392+
393+ sockPath := strings .TrimSpace (string (output ))
394+ assert .NotEmpty (t , sockPath , "SSH_AUTH_SOCK should be set when agent forwarding is enabled" )
395+ assert .Contains (t , sockPath , "/tmp/ssh-" , "agent socket should be in /tmp/ssh-*" )
396+ }
397+
398+ func TestNoSocketWithoutForwardingRequest (t * testing.T ) {
399+ t .Parallel ()
400+
401+ signer , pubKey := generateTestKeyPair (t )
402+ _ , addr := startTestServerWithConfig (t , Config {
403+ Port : 0 ,
404+ AuthorizedKeys : []ssh.PublicKey {pubKey },
405+ Env : []string {"PATH=/usr/bin:/bin" },
406+ DefaultUID : uint32 (os .Getuid ()),
407+ DefaultGID : uint32 (os .Getgid ()),
408+ DefaultUser : "testuser" ,
409+ DefaultHome : os .TempDir (),
410+ DefaultShell : "/bin/sh" ,
411+ AgentForwarding : true ,
412+ Logger : slog .Default (),
413+ })
414+
415+ client := dialSSH (t , addr , signer )
416+
417+ // Do NOT request agent forwarding.
418+
419+ // Run a command that checks if SSH_AUTH_SOCK is set.
420+ session , err := client .NewSession ()
421+ require .NoError (t , err )
422+ defer func () { _ = session .Close () }()
423+
424+ output , err := session .CombinedOutput ("echo ${SSH_AUTH_SOCK:-unset}" )
425+ require .NoError (t , err )
426+
427+ result := strings .TrimSpace (string (output ))
428+ assert .Equal (t , "unset" , result , "SSH_AUTH_SOCK should not be set without forwarding request" )
429+ }
0 commit comments