go - ssh session 打开请求最终在ssh连接上提供EOF

标签 go networking design-patterns ssh agent

我研究在节点上运行的代理恶魔。启动代理时,将建立到其他节点的所有ssh连接,然后在特定的时间间隔(每周一次)上,我们在这些ssh连接上创建新 session 以与其他节点进行通信。但据观察,在该时间范围内大约1个月后,创建 session 会产生EOF错误。

      User: config.Username,
      Auth: []ssh.AuthMethod{
         ssh.Password(config.Password),
      },
      HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
         return nil
      },
}
client, err := ssh.Dial("tcp", config.Host+":22", sshConfig)
session, err := client.NewSession()
defer session.Close()
b, err := session.CombinedOutput(command)
当此 session 创建出现EOF错误时,是否有任何方法可以恢复处于工作状态的ssh连接?
如果仅在读取/写入错误时考虑重拨或重新连接,则此处使用哪种设计模式将很有用。
谢谢

最佳答案

我认为问题是一段时间后连接断开,您可以尝试的一些方法是

  • 如果服务器提供api或ping来增加连接过期时间,请创建一种机制来保持连接有效。像github.com/felixge/tcpkeepalive
  • 或尝试以固定的时间间隔重新拨号连接。
  • 关于go - ssh session 打开请求最终在ssh连接上提供EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63590532/

    相关文章:

    python - 支持思科路由器,使用 NAPALM,使用 SSH 远程登录

    java - 接口(interface)方法对所有实现类都没有意义

    go - 类型更改未按预期运行

    file - 打开和写入文件时出错

    java.net.ConnectException : Connection refused

    c++ - 工厂方法模式

    在同一个类中使用多种类型的数据库时的 PHP 依赖注入(inject)

    Golang archive/zip 产生损坏的 zip 文件

    github - 去吧, golang : external package import with GOROOT

    c# - 延迟传入网络连接