43 lines
1001 B
Go
43 lines
1001 B
Go
package Sync
|
|
|
|
import (
|
|
"golang.org/x/crypto/ssh"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
func ConnectSSH(config *ssh.ClientConfig, serverAddrString string) (sshClientConnection *ssh.Client) {
|
|
|
|
currentRetriesServer := 0
|
|
|
|
// Loop for retries:
|
|
for {
|
|
|
|
// Try to connect to the SSH server:
|
|
if sshClientConn, err := ssh.Dial(`tcp`, serverAddrString, config); err != nil {
|
|
|
|
// Failed:
|
|
currentRetriesServer++
|
|
log.Printf("Was not able to connect with the SSH server %s: %s\n", serverAddrString, err.Error())
|
|
|
|
// Is a retry alowed?
|
|
if currentRetriesServer < maxRetriesServer {
|
|
log.Println(`Retry...`)
|
|
time.Sleep(1 * time.Second)
|
|
} else {
|
|
|
|
// After the return, this thread is closed down. The client can try it again...
|
|
log.Println(`No more retries for connecting the SSH server.`)
|
|
return
|
|
}
|
|
|
|
} else {
|
|
|
|
// Success:
|
|
log.Println(`Connected to the SSH server ` + serverAddrString)
|
|
sshClientConnection = sshClientConn
|
|
return
|
|
}
|
|
}
|
|
}
|