func Connection(info ConnetctionInfo) *ssh.Client {
var auths []ssh.AuthMethod
auths = 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("连接%s失败:%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("读取key文件%s失败:\n%s\n", v, err)
os.Exit(1)
}
signer, err := ssh.ParsePrivateKey(buf)
if err != nil {
fmt.Printf("解析key文件%s失败:\n%s\n", v, err)
os.Exit(1)
}
privateKey = append(privateKey, ssh.PublicKeys(signer))
}
}