go - 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 连接恢复工作状态?
如果我仅在读/写错误时才考虑重拨或重新连接,那么哪种设计模式将在这里有用。
谢谢
解决方案
我认为问题是一段时间后连接断开,您可以尝试一些事情是
如果服务器提供 api 或 ping 以增加连接过期时间,请创建一种机制以保持连接处于活动状态。像github.com/felixge/tcpkeepalive
或者尝试以固定的时间间隔重新拨号连接。
推荐阅读
- python - 如何在python中拆分长度列表
- android - Android Studio gradle 问题中的 Flutter 项目
- javascript - 如何在控制器的rails flash错误消息中添加link_to模式窗口?
- dolphindb - 在 DolphinDB 中创建一个具有一定大小的空向量
- ionic-framework - BackgroundGeolocation 在 ionic 4 中不存在
- python - 如何以最有效的方式翻转数据集?
- api - 在 laravel 5.7 中更新 API
- python - 熊猫,尝试从行数过多的数据框中每个movie_id仅采样5行
- mysql - 在数据库中将 nvarchar(MAX) 更改为 nvarchar(n)
- python - 如何在python中将对象表示为seaborn图的变量?