golang ssh拨号超时

时间:2017-03-30 11:36:08

标签: go ssh

在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秒

2 个答案:

答案 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)

来自connection docs

  

DialTimeout就像Dial一样,但会超时。超时包括   名称解析,如果需要。