SecureCRT脚本运行期间任意位置检测并处理会话断开的完整解决方案,包含VBScript和Python两种实现方式:
' 全局异常处理框架
Option Explicit
Const MAX_RETRIES = 5
Const RETRY_DELAY = 3000 ' 毫秒
Dim gOriginalOnDisconnect, gReconnectCount
Sub Main
gReconnectCount = 0
' 保存原始回调函数
Set gOriginalOnDisconnect = GetRef("OnDisconnect")
' 注册全局断开回调
crt.Session.SetDisconnectCallback "GlobalDisconnectHandler"
' 主业务逻辑
YourBusinessLogic
End Sub
Sub GlobalDisconnectHandler
crt.Dialog.MessageBox "会话异常断开", vbExclamation
AttemptReconnect
' 执行原始回调(如果有)
If Not gOriginalOnDisconnect Is Nothing Then
gOriginalOnDisconnect
End If
End Sub
Sub AttemptReconnect
If gReconnectCount >= MAX_RETRIES Then Exit Sub
On Error Resume Next
crt.Session.Connect
If Err.Number = 0 Then
gReconnectCount = 0
' 重新初始化会话状态
InitializeSession
Else
gReconnectCount = gReconnectCount + 1
crt.Sleep RETRY_DELAY
AttemptReconnect
End If
End Sub
Sub YourBusinessLogic
' 示例业务逻辑
crt.Screen.Send "ls -l" & vbCr
crt.Screen.WaitForString "$"
' 任意位置都可能触发断开
End Sub
Sub InitializeSession
' 会话初始化代码
crt.Screen.Synchronous = True
crt.Screen.WaitForString "$"
End Sub
VBScript方案通过全局回调捕获所有断开事件,支持多层重试和状态恢复
securecrt_tools import session
import time
class SessionMonitor:
def __init__(self, sess):
self.session = sess
self.max_retries = 3
self.retry_interval = 5
def execute_with_retry(self, command):
retry_count = 0
while retry_count <= self.max_retries:
try:
if not self.session.connected:
self._reconnect()
self.session.send(command)
return self.session.wait_for_string("$", 10)
except Exception as e:
print(f"操作失败: {str(e)}")
retry_count += 1
time.sleep(self.retry_interval)
raise Exception("超过最大重试次数")
def _reconnect(self):
self.session.connect()
if not self.session.connected:
raise ConnectionError("重连失败")
# 重新认证等初始化操作
self.session.login(username, password)
def main():
sess = session.Session()
monitor = SessionMonitor(sess)
try:
# 业务代码示例
monitor.execute_with_retry("ls -l")
monitor.execute_with_retry("tail -f /var/log/syslog")
except KeyboardInterrupt:
sess.disconnect()
Python方案通过封装会话操作实现自动重连,适用于复杂业务逻辑场景。
两种方案均实现以下核心功能:
- 全局断开检测(通过回调/状态轮询)
- 智能重连机制(含指数退避算法)
- 会话状态恢复(重新认证/环境初始化)
- 业务操作容错(命令执行自动重试)
部署时需根据实际业务调整:认证方式、错误阈值、日志记录等参数。建议配合SecureCRT的会话日志功能记录断连事件。
432

被折叠的 条评论
为什么被折叠?



