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.
5 // +build darwin dragonfly freebsd linux netbsd openbsd
13 "golang.org/x/crypto/ssh"
14 "golang.org/x/crypto/ssh/agent"
17 func TestAgentForward(t *testing.T) {
18 server := newServer(t)
19 defer server.Shutdown()
20 conn := server.Dial(clientConfig())
23 keyring := agent.NewKeyring()
24 if err := keyring.Add(agent.AddedKey{PrivateKey: testPrivateKeys["dsa"]}); err != nil {
25 t.Fatalf("Error adding key: %s", err)
27 if err := keyring.Add(agent.AddedKey{
28 PrivateKey: testPrivateKeys["dsa"],
29 ConfirmBeforeUse: true,
32 t.Fatalf("Error adding key with constraints: %s", err)
34 pub := testPublicKeys["dsa"]
36 sess, err := conn.NewSession()
38 t.Fatalf("NewSession: %v", err)
40 if err := agent.RequestAgentForwarding(sess); err != nil {
41 t.Fatalf("RequestAgentForwarding: %v", err)
44 if err := agent.ForwardToAgent(conn, keyring); err != nil {
45 t.Fatalf("SetupForwardKeyring: %v", err)
47 out, err := sess.CombinedOutput("ssh-add -L")
49 t.Fatalf("running ssh-add: %v, out %s", err, out)
51 key, _, _, _, err := ssh.ParseAuthorizedKey(out)
53 t.Fatalf("ParseAuthorizedKey(%q): %v", out, err)
56 if !bytes.Equal(key.Marshal(), pub.Marshal()) {
57 t.Fatalf("got key %s, want %s", ssh.MarshalAuthorizedKey(key), ssh.MarshalAuthorizedKey(pub))