在ssh连接上创建DialTimeout的最佳方法是什么?例如,此代码始终返回" Ping截止日期超过":
func (t *Tunnel) ping(sshConn *ssh.Client, addr string) (net.Conn, error) {
var (
conn net.Conn
err error
done chan int
)
go func() {
time.Sleep(getSeconds(10))
err = errors.New("Ping deadline exceed")
log.Printf("%v\nStatus: bad %s -> %s", err, t.serverAddr, addr)
t.writeStatus(bad)
done <- 1
close(done)
}()
go func() {
conn, err = sshConn.Dial("tcp", addr)
if err != nil {
t.writeStatus(bad)
log.Printf("%v\nStatus: bad %s -> %s", err, t.serverAddr, addr)
}
done <- 1
close(done)
}()
<-done
return conn, err
}
ssh.ClientConfig中的PS超时设置为5秒
答案 0 :(得分:1)
已经两年了,但是也许有人需要解决方案。就在这里。
在ssh.Dial中,您可以通过 ssh.ClientConfig ,
进行配置config := &ssh.ClientConfig { Timeout: time.Minute }
client, _ := ssh.Dial("tcp", t.ServerAddr, config)
您可以在here中找到更多信息:
//超时为零表示没有超时。 超时时间。持续时间
答案 1 :(得分:-1)
而不是使用sshConn.Dial看看:
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
DialTimeout就像Dial一样,但会超时。超时包括 名称解析,如果需要。