温馨提示×

Linux SecureCRT如何实现自动化部署

小樊
37
2025-11-16 09:38:10
栏目: 智能运维

Linux 上 SecureCRT 自动化部署实践

一 方案总览与适用场景

  • Linux 上使用 SecureCRT 做自动化部署,常用做法包括:会话的登录动作/启动命令自动执行、基于 VBScript/Python/JavaScript 的脚本自动化、批量会话循环执行、以及配合 SFTP/Zmodem 做文件分发。对于大规模与复杂变更,建议优先使用 Ansible 等专用自动化工具;SecureCRT 更适合“半自动化/可视化复核 + 批量执行”的场景。

二 快速落地步骤

  • 准备服务器侧脚本
    • 在目标 Linux 主机准备部署脚本(如:拉取代码、备份、停启服务、健康检查),并赋权可执行,例如:
      • 示例脚本 deploy.sh
        #!/usr/bin/env bash
        set -e
        APP_DIR=/opt/myapp
        BACKUP_DIR=/opt/backup/$(date +%F_%H-%M-%S)
        mkdir -p "$BACKUP_DIR"
        
        # 备份
        [ -d "$APP_DIR/current" ] && cp -a "$APP_DIR/current" "$BACKUP_DIR"
        
        # 拉取与部署
        cd "$APP_DIR/releases" && git pull
        ln -sfn "$(pwd)/$(git rev-parse --short HEAD)" "$APP_DIR/current"
        
        # 重启服务
        sudo systemctl restart myapp || { echo "服务重启失败"; exit 1; }
        
        # 健康检查
        for i in {1..30}; do
          curl -fs http://127.0.0.1:8080/health && { echo "OK"; exit 0; }
          sleep 2
        done
        echo "健康检查失败"; exit 1
        
      • 赋权:chmod +x deploy.sh
  • 使用 SFTP 上传脚本与制品
    • SecureCRT 会话窗口右键选择 SFTP > 上传,将 deploy.sh 与制品(如 app.tar.gz)传到目标主机(如 /opt/myapp/)。
  • 配置会话自动执行
    • 打开会话属性,进入 连接 > 登录动作/自动化登录,按需启用自动登录;在 启动时发送字符串 填入要执行的命令,例如:
      chmod +x /opt/myapp/deploy.sh
      /opt/myapp/deploy.sh
      
    • 如需在连接建立后延时执行,可在命令前加 sleep 2;。保存后重连即可自动跑脚本。
  • 批量执行与多机编排
    • 将多个主机的会话保存后,使用脚本(如 VBScript/Python/JS)遍历会话列表,逐一连接并执行上述“启动命令”,即可实现批量部署。也可结合 SecureCRT Scripting API 做更细粒度的输出分析与分支逻辑。

三 脚本示例与关键 API

  • 示例一 登录动作 + 启动命令(最快速)
    • 会话属性中启用自动化登录,并在“启动时发送字符串”填入:
      cd /opt/myapp && nohup ./deploy.sh >deploy.log 2>&1 &
      
    • 适合简单、幂等的部署任务;如需等待与回显,可改为交互式脚本执行并在脚本内记录日志。
  • 示例二 Python 脚本批量执行(SecureCRT 8.x 内置 Python)
    • 思路:使用 SecureCRT Scripting API 连接会话、发送命令、等待关键字、记录日志。
    • 参考骨架(按实际会话名与命令调整):
      # $language = "Python"
      # $interface = "1.0"
      
      import os, time, re
      from datetime import datetime
      
      sessions = ["app-prod-01", "app-prod-02"]
      log_dir = os.path.expanduser("~/securecrt_logs")
      os.makedirs(log_dir, exist_ok=True)
      
      def log(s, host=None):
          ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
          msg = f"[{ts}] {host}: {s}" if host else s
          print(msg)
          with open(os.path.join(log_dir, "batch.log"), "a") as f:
              f.write(msg + "\n")
      
      def wait_for_prompt(crt, prompt, timeout=30):
          idx, match, elapsed = crt.Screen.WaitForStrings([prompt, "#", "$", ">"], timeout)
          return idx, match
      
      for s in sessions:
          try:
              crt.Session.Connect(f"/S {s}")
              screen = crt.Screen
              screen.Synchronous = True
      
              # 等待登录提示并自动输入(若未启用自动登录)
              # idx, _ = wait_for_prompt(crt, "login:")
              # if idx == 0: screen.Send("myuser\r")
      
              # 执行部署
              cmd = f"cd /opt/myapp && bash deploy.sh 2>&1; echo 'DEPLOY_EXIT=$?'\r"
              screen.Send(cmd)
              idx, _ = wait_for_prompt(crt, "DEPLOY_EXIT=", 300)
              screen.Send("\r")
              _, out = wait_for_prompt(crt, "#", 10)
              log(out.strip(), s)
      
              # 根据退出码做判断
              if "DEPLOY_EXIT=0" in out:
                  log("部署成功", s)
              else:
                  log("部署失败", s)
          except Exception as e:
              log(f"异常: {e}", s)
          finally:
              if crt.Session.Connected:
                  crt.Session.Disconnect()
              time.sleep(1)
      
    • 关键点:使用 Screen.WaitForStrings 等待关键字(如 #、$、> 或自定义标记),用 Screen.Send 发送命令,务必开启 Synchronous 保证顺序执行与回显一致性。

四 批量与调度

  • 批量会话管理
    • 会话配置通常位于 %AppData%\Roaming\VanDyke\Config\Sessions(Windows)或 ~/.vandyke/Config/Sessions(Linux/macOS)。可通过复制/模板化该目录下的会话文件,快速生成多机会话,再配合脚本批量执行。
  • 定时与无人值守
    • Linux 上使用 cron 调用 SecureCRT 命令行执行脚本(如 SecureCRT /S "session-name" /SCRIPT myscript.py),实现定时或事件触发的自动化部署。
  • 文件传输配合
    • 制品分发优先用 SFTP(右键会话选择 SFTP > 上传),大文件可选 Zmodem;传输完成后由启动命令触发部署脚本,减少人工介入。

五 安全与最佳实践

  • 认证与凭据
    • 优先使用 SSH 密钥认证,避免明文密码;必要时结合 SSH Agent 或 SecureCRT 的密码保存策略,降低交互复杂度与泄露风险。
  • 日志与审计
    • 启用会话日志,或在脚本中统一重定向输出(如 >> deploy.log 2>&1),便于审计与回溯。
  • 幂等与可回滚
    • 部署脚本需具备幂等性(可重复执行),并设计备份/回滚机制(如上例的 BACKUP_DIR)。
  • 错误处理与超时
    • 在脚本与自动化流程中加入退出码检查超时控制失败告警,关键步骤失败应立即中止并回滚。
  • 适用边界
    • 对于 大规模、跨环境、频繁变更 的部署,优先采用 Ansible/SaltStack 等配置管理与编排工具;SecureCRT 更适合“可视化复核 + 批量执行/回放”的辅助角色。

0