SecureCRT脚本运行期间任意位置检测并处理会话断开

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方案通过封装会话操作实现自动重连,适用于复杂业务逻辑场景。

两种方案均实现以下核心功能:

  1. 全局断开检测(通过回调/状态轮询)
  2. 智能重连机制(含指数退避算法)
  3. 会话状态恢复(重新认证/环境初始化)
  4. 业务操作容错(命令执行自动重试)

部署时需根据实际业务调整:认证方式、错误阈值、日志记录等参数。建议配合SecureCRT的会话日志功能记录断连事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值