func sshClientConfig(user string, checker *HostKeyChecker, addr string) (*gossh.ClientConfig, error) { agentClient, err := SSHAgentClient() if err != nil { return nil, err } signers, err := agentClient.Signers() if err != nil { return nil, err } cfg := gossh.ClientConfig{ User: user, Auth: []gossh.AuthMethod{ gossh.PublicKeys(signers...), }, } if checker != nil { cfg.HostKeyCallback = checker.Check cfg.HostKeyAlgorithms = checker.GetHostKeyAlgorithms(addr) } return &cfg, nil }
fakeReceptor.RouteToHandler("GET", "/v1/actual_lrps/"+processGuid+"/index/0", ghttp.CombineHandlers( ghttp.VerifyRequest("GET", "/v1/actual_lrps/"+processGuid+"/index/0"), ghttp.RespondWithJSONEncoded(http.StatusOK, actualLRP), ), ) Expect(process).NotTo(BeNil()) }) Context("when the client attempts to verify the host key", func() { var handshakeHostKey ssh.PublicKey BeforeEach(func() { clientConfig.HostKeyCallback = func(hostname string, remote net.Addr, key ssh.PublicKey) error { handshakeHostKey = key return errors.New("fail") } }) It("receives the correct host key", func() { _, err := ssh.Dial("tcp", address, clientConfig) Expect(err).To(HaveOccurred()) proxyHostKey, err := ssh.ParsePrivateKey([]byte(hostKeyPem)) Expect(err).NotTo(HaveOccurred()) proxyPublicHostKey := proxyHostKey.PublicKey() Expect(proxyPublicHostKey.Marshal()).To(Equal(handshakeHostKey.Marshal())) }) })