首页 > 解决方案 > ssh 会话打开请求最终在 ssh 连接上给出 EOF

问题描述

我在一个节点上运行的代理恶魔工作。当我们启动代理时,会建立到其他节点的所有 ssh 连接,然后在特定时间间隔(每周一次)我们在这些 ssh 连接上创建新会话以与其他节点通信。但据观察,在大约 1 个月的时间范围内,会话创建会给出 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)

当此会话创建出现 EOF 错误时,有没有办法让 ssh 连接恢复工作状态?

如果我仅在读/写错误时才考虑重拨或重新连接,那么哪种设计模式将在这里有用。

谢谢

标签: gonetworkingdesign-patternssshagent

解决方案


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

  1. 如果服务器提供 api 或 ping 以增加连接过期时间,请创建一种机制以保持连接处于活动状态。像github.com/felixge/tcpkeepalive

  2. 或者尝试以固定的时间间隔重新拨号连接。


推荐阅读