@@ -20,6 +20,7 @@ import (
2020 "github.com/stretchr/testify/assert"
2121 "github.com/stretchr/testify/require"
2222 "golang.org/x/crypto/ssh"
23+ "golang.org/x/crypto/ssh/agent"
2324)
2425
2526// generateTestKeyPair creates an ECDSA P-256 key pair for testing and
@@ -327,10 +328,13 @@ func TestAgentForwardingDisabled(t *testing.T) {
327328
328329 client := dialSSH (t , addr , signer )
329330
330- // Request agent forwarding — should be rejected.
331- ok , _ , err := client .SendRequest ("auth-agent-req@openssh.com" , true , nil )
331+ session , err := client .NewSession ()
332332 require .NoError (t , err )
333- assert .False (t , ok , "agent forwarding should be rejected when disabled" )
333+ defer func () { _ = session .Close () }()
334+
335+ // Request agent forwarding via the real API — should be rejected.
336+ err = agent .RequestAgentForwarding (session )
337+ assert .Error (t , err , "agent forwarding should be rejected when disabled" )
334338}
335339
336340func TestAgentForwardingEnabled (t * testing.T ) {
@@ -352,10 +356,23 @@ func TestAgentForwardingEnabled(t *testing.T) {
352356
353357 client := dialSSH (t , addr , signer )
354358
355- // Request agent forwarding — should be accepted.
356- ok , _ , err := client .SendRequest ("auth-agent-req@openssh.com" , true , nil )
359+ session , err := client .NewSession ()
360+ require .NoError (t , err )
361+ defer func () { _ = session .Close () }()
362+
363+ // Request agent forwarding via the real API — should be accepted.
364+ err = agent .RequestAgentForwarding (session )
365+ require .NoError (t , err , "agent forwarding should be accepted when enabled" )
366+
367+ // Verify the flag was set by running a command on a second session.
368+ session2 , err := client .NewSession ()
357369 require .NoError (t , err )
358- assert .True (t , ok , "agent forwarding should be accepted when enabled" )
370+ defer func () { _ = session2 .Close () }()
371+
372+ output , err := session2 .CombinedOutput ("echo ${SSH_AUTH_SOCK:-unset}" )
373+ require .NoError (t , err )
374+ result := strings .TrimSpace (string (output ))
375+ assert .Contains (t , result , "/tmp/ssh-" , "agent socket should be set on connection after forwarding request" )
359376}
360377
361378func TestAgentSocketCreated (t * testing.T ) {
@@ -377,16 +394,15 @@ func TestAgentSocketCreated(t *testing.T) {
377394
378395 client := dialSSH (t , addr , signer )
379396
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.
397+ // Request agent forwarding and run a command on the same session,
398+ // which is the real client flow: auth-agent-req arrives before exec.
386399 session , err := client .NewSession ()
387400 require .NoError (t , err )
388401 defer func () { _ = session .Close () }()
389402
403+ err = agent .RequestAgentForwarding (session )
404+ require .NoError (t , err )
405+
390406 output , err := session .CombinedOutput ("echo $SSH_AUTH_SOCK" )
391407 require .NoError (t , err )
392408
0 commit comments