我正在从 linux/Fedora 服务器创建/运行一个 shell 脚本,该脚本将多个设备重命名为默认值。一旦它完成第一个设备,它就会挂起,因为连接没有关闭。该脚本默认 ips 并重新启动网络服务。在设备上运行时如何关闭连接?
这是重置它们的脚本。
/bin/ssh $CHECKME -o ConnectTimeout=5 "/usr/local/bin/NameTerm.sh reset"
这CHECKME
是我获取所连接设备的 ip 并运行良好的地方。这NameTerm.sh
是一个 shell 脚本,它将 IP 地址设置回 0.0.0.0,然后重新启动服务网络。我无法改变剧本。
答案1
如果 SSH 服务器消失,从客户端的角度来看,TCP 连接仍然存在,并且 SSH 客户端默认会等待它。
该ConnectTimeout
选项没有区别,根据名称,它在以下情况下使用连接,而不是当连接已处于活动状态时。
相反,您可能想使用ServerAliveInterval
and ServerAliveCountMax
:
ServerAliveCountMax
设置服务器活动消息的数量(见下文),可以在 ssh(1) 接收不到服务器返回的任何消息的情况下发送该消息。如果在发送服务器活动消息时达到此阈值,ssh 将与服务器断开连接,从而终止会话。
ServerAliveInterval
设置超时间隔(以秒为单位),在此之后如果没有从服务器接收到数据,ssh(1) 将通过加密通道发送消息以请求服务器响应。默认为0,表示这些消息不会发送到服务器。
这将等待大约 3x5 = 15 秒,但ServerAliveCountMax
默认设置为 3,因此您只需设置ServerAliveInterval
.
ServerAliveCountMax 3
ServerAliveInterval 5