func (ss *ScpStorage) Connect() error { var err error clientConfig := &ssh.ClientConfig{ User: ss.User, Auth: []ssh.ClientAuth{ ssh.ClientAuthPassword(password(ss.Password)), ssh.ClientAuthKeyring(ss.Keychain), }, } ss.connexion, err = ssh.Dial("tcp", ss.Endpoint, clientConfig) if err != nil { return fmt.Errorf("Failed to dial: %s", err.Error()) } return nil }
func getConnection(hostname string) (conn *ssh.ClientConn, err error) { connectedHostsMutex.Lock() conn = connectedHosts[hostname] connectedHostsMutex.Unlock() if conn != nil { return } defer func() { if msg := recover(); msg != nil { err = errors.New("Panic: " + fmt.Sprint(msg)) } }() waitAgent() conf, agentConn := makeConfig() if agentConn != nil { defer agentConn.Close() } defer releaseAgent() port := "22" str := strings.SplitN(hostname, ":", 2) if len(str) == 2 { hostname = str[0] port = str[1] } conn, err = ssh.Dial("tcp", hostname+":"+port, conf) if err != nil { return } sendProxyReply(&ConnectionProgress{ConnectedHost: hostname}) connectedHostsMutex.Lock() connectedHosts[hostname] = conn connectedHostsMutex.Unlock() return }