golang ssh拨号超时

abr*_*tov 5 ssh go

在 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
}
Run Code Online (Sandbox Code Playgroud)

PS ssh.ClientConfig 中的超时设置为 5 秒

Rya*_*est -1

不使用 sshConn.Dial 看一下:

func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
Run Code Online (Sandbox Code Playgroud)

连接文档

DialTimeout 的作用与 Dial 类似,但需要超时。如果需要,超时包括名称解析。