github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/src/golang.org/x/crypto/ssh/test/agent_unix_test.go (about) 1 // Copyright 2014 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build darwin dragonfly freebsd linux netbsd openbsd 6 7 package test 8 9 import ( 10 "bytes" 11 "testing" 12 13 "golang.org/x/crypto/ssh" 14 "golang.org/x/crypto/ssh/agent" 15 ) 16 17 func TestAgentForward(t *testing.T) { 18 server := newServer(t) 19 defer server.Shutdown() 20 conn := server.Dial(clientConfig()) 21 defer conn.Close() 22 23 keyring := agent.NewKeyring() 24 if err := keyring.Add(agent.AddedKey{PrivateKey: testPrivateKeys["dsa"]}); err != nil { 25 t.Fatalf("Error adding key: %s", err) 26 } 27 if err := keyring.Add(agent.AddedKey{ 28 PrivateKey: testPrivateKeys["dsa"], 29 ConfirmBeforeUse: true, 30 LifetimeSecs: 3600, 31 }); err != nil { 32 t.Fatalf("Error adding key with constraints: %s", err) 33 } 34 pub := testPublicKeys["dsa"] 35 36 sess, err := conn.NewSession() 37 if err != nil { 38 t.Fatalf("NewSession: %v", err) 39 } 40 if err := agent.RequestAgentForwarding(sess); err != nil { 41 t.Fatalf("RequestAgentForwarding: %v", err) 42 } 43 44 if err := agent.ForwardToAgent(conn, keyring); err != nil { 45 t.Fatalf("SetupForwardKeyring: %v", err) 46 } 47 out, err := sess.CombinedOutput("ssh-add -L") 48 if err != nil { 49 t.Fatalf("running ssh-add: %v, out %s", err, out) 50 } 51 key, _, _, _, err := ssh.ParseAuthorizedKey(out) 52 if err != nil { 53 t.Fatalf("ParseAuthorizedKey(%q): %v", out, err) 54 } 55 56 if !bytes.Equal(key.Marshal(), pub.Marshal()) { 57 t.Fatalf("got key %s, want %s", ssh.MarshalAuthorizedKey(key), ssh.MarshalAuthorizedKey(pub)) 58 } 59 }