This is a creation in Article, where the information may have evolved or changed.
Func Connection (Info connetctioninfo) *ssh. Client {var auths []ssh. authmethodauths = Append (Auths, Privatekey ...) If aconn, err: = Net. Dial ("Unix", Os. Getenv ("Ssh_auth_sock")); Err = = Nil {auths = append (auths, ssh. Publickeyscallback (agent. Newclient (Aconn). Signers))}auths = append (auths, ssh. Password (info. PASSWD)) Config: = ssh. Clientconfig{user:info. User,auth:auths,}for I: = 0; I < 5; i++ {conn, err: = ssh. Dial ("TCP", FMT. Sprintf ("%s:%s", info. IP, Info. Port), &config) If Err = = Nil {return Conn}if i = = 4 && Err! = Nil {errorlist = append (Errorlist, FMT. Sprintf ("Connection%s failed:%s\n", info.) IP, err)) return nil}time. Sleep (1e9)}return Nil}
Func ReadKey (KeyPath []string) {for _, V: = range KeyPath {buf, err: = Ioutil. ReadFile (v) if err! = Nil {fmt. Printf ("Read key file%s failed: \n%s\n", V, err) os. Exit (1)}signer, err: = ssh. Parseprivatekey (BUF) if err! = Nil {fmt. Printf ("Parsing key file%s failed: \n%s\n", V, err) os. Exit (1)}privatekey = append (Privatekey, ssh. Publickeys (signer))}}