golang ssh拨号超时

What is the best way to create DialTimeout on ssh connection? For example, this code always returns "Ping deadline exceed":

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
Status: 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
Status: bad %s -> %s", err, t.serverAddr, addr)
        }
        done <- 1
        close(done)
    }()
    <-done
    return conn, err
}

PS Timeout in ssh.ClientConfig is set to 5 seconds

ssh
dqaq59269
dqaq59269 抱歉,我最初误解了您的问题。无法为sshdirect-tcpip命令提供超时,但是远程主机最终应该能够超时,尽管可能不会在10秒以内(取决于远程主机内核TCP设置)
3 年多之前 回复
doutizha7526
doutizha7526 我已经在ssh.ClientConfig中设置了超时,但是当ssh服务器关闭时,我仍然有无限的延迟。但是,我发现了一个错误,尽管需要通过make(chanint)创建完chanint
3 年多之前 回复

1个回答



而不是使用sshConn.Dial,请看一下:</ p>

  func DialTimeout( 网络,地址字符串,超时时间。持续时间)(Conn,错误)
</ code> </ pre>

来自连接文档:</ p>


DialTimeout的作用类似于Dial,但需要超时。 超时包括
名称解析(如果需要)。</ p>
</ blockquote>
</ div>

展开原文

原文

Instead of using sshConn.Dial take a look at:

func DialTimeout(network, address string, timeout time.Duration) (Conn, error)

From the connection docs:

DialTimeout acts like Dial but takes a timeout. The timeout includes name resolution, if required.

duanguangwang5829
duanguangwang5829 direct-tcpip不支持截止日期。 sourcegraph.com/github.com/golang/crypto/-/blob/ssh/...。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问