# 终端远程连接

# 一、功能概述

通过远程方式连接本地终端,将本地终端注册至MCP控制中心,实现对本地终端的远程命令执行与管理。

# 二、客户端部署

# 2.1 客户端下载

点击下载alinesno-infra-claw (opens new window)

新版本通过打包和内部群下载。

# 2.2 客户端启动

Token获取方式在MCP界面的[请求Token]生成获取,同时确保本地安装jdk21及以上版本。

# 2.2.1 基础启动(临时运行)

适用于调试场景,终端关闭后进程终止:

# 核心参数说明:
# -DAGENT_WS_SERVER_URL:MCP控制中心的WebSocket服务地址
# -DAGENT_WS_AUTH_TOKEN:客户端接入控制中心的认证令牌
java -DAGENT_WS_SERVER_URL=wss://xxxx  -DAGENT_WS_AUTH_TOKEN=mcp-xxx -jar alinesno-infra-claw-xxxx-SNAPSHOT.jar

# 2.2.2 后台启动(Linux生产环境)

适用于生产环境,进程后台常驻运行,日志输出至agent.log:

nohup java  -DAGENT_WS_SERVER_URL=wss://xxxx -DAGENT_WS_AUTH_TOKEN=mcp-xxx -jar alinesno-infra-claw-xxxx-SNAPSHOT.jar > agent.log 2>&1 &

# 2.3 客户端注册

此功能位于MCP界面的[客户端]菜单

启动客户端后,程序会自动完成以下操作:

  1. 向MCP控制中心发起注册请求
  2. 注册成功后,生成并返回ClientId(格式示例:AGENT-XXXXX)
  3. 该ClientId为终端唯一标识,需记录并用于后续配置

# 三、MCP控制中心配置

# 3.1 核心功能

通过自定义工具类实现Mac系统下的终端命令远程执行,支持命令参数校验、执行结果格式化、异常捕获等能力。

# 3.2 控制脚本

以下为控制脚本示例:

注意 脚本的类名称根据场景命名,比如MacLocalAIPClawTool,为Mac系统下的终端执行脚本

import com.alinesno.infra.smart.mcp.tools.AIPClawTool;

/**
 * MacLocal系统专用的AI命令执行工具类
 * 继承自通用的AIPClawTool基类,专门用于在Mac环境下执行自定义Shell命令
 * 核心功能:
 *  1. 初始化SSH连接参数(绑定终端ClientId)
 *  2. 接收外部传入的命令参数(用途描述/执行命令)
 *  3. 执行Shell命令并捕获执行结果/异常
 *  4. 格式化返回执行结果(便于前端展示/日志分析)
 * 
 * @author (可补充作者信息)
 * @version 1.0
 */
class MacLocalAIPClawTool extends AIPClawTool {

  /**
   * 初始化SSH连接参数
   * 作用:绑定当前终端的WebSocket客户端ID,作为MCP控制中心识别终端的唯一标识
   * 注意:需替换为实际注册时获取的ClientId(AGENT-XXXXX)
   */
  public void initParams() {
    // 替换为步骤2.3中获取的真实ClientId
    setWsClientId("AGENT-XXXXX");
  }

  /**
   * 核心执行方法:执行自定义Shell命令
   * 执行流程:初始化参数 → 获取外部参数 → 校验参数 → 执行命令 → 格式化结果
   * 
   * @return String 格式化的命令执行结果,包含用途、命令、结果/异常信息
   */
  public String execute() {
    // 1. 初始化SSH连接参数(绑定ClientId)
    initParams();
  
    // 2. 获取外部传入的参数(从MCP上下文参数池读取)
    // commandPurpose:命令执行的业务用途描述(如"查看磁盘占用")
    def commandPurpose = getParam("commandPurpose");  
    // shellCommand:待执行的Shell命令(核心参数,如"df -h")
    def shellCommand = getParam("shellCommand");       

    // 3. 参数校验:确保核心命令不为空
    if (!shellCommand) {
        return "执行失败:未指定要执行的Shell命令(shellCommand参数为空)";
    }
    // 用途描述为空时设置默认值,保证结果完整性
    if (!commandPurpose) {
        commandPurpose = "未描述执行用途";  
    }

    // 4. 执行命令并处理结果(使用StringBuilder提升拼接效率)
    StringBuilder resultBuilder = new StringBuilder();
    try { 
        // 调用基类方法执行Shell命令
        String commandResult = executeCommand(shellCommand);  
        
        // 5. 构建格式化的成功结果
        resultBuilder.append("命令执行用途:").append(commandPurpose).append("\n")
                     .append("执行的Shell命令:").append(shellCommand).append("\n")
                     .append("命令执行结果:").append(commandResult);
        
    } catch (Exception e) { 
        // 捕获异常并格式化返回
        resultBuilder.append("命令执行用途:").append(commandPurpose).append("\n")
                     .append("执行的Shell命令:").append(shellCommand).append("\n")
                     .append("执行失败原因:").append(e.getMessage()); 
    }
    
    // 返回最终格式化结果
    return resultBuilder.toString();
  }
  
}

# 四、使用方式

将上述MacLocalAIPClawTool工具类集成至MCP控制中心的SKILL/工具模块,通过引用该工具类:

  1. 传入commandPurpose(可选)和shellCommand(必选)参数
  2. 调用execute()方法即可远程执行指定的Shell命令
  3. 接收并解析格式化的执行结果

# 五、注意事项

  1. ClientId为终端唯一标识,需确保与实际注册值一致,否则无法建立连接
  2. 生产环境建议使用nohup后台启动方式,避免终端关闭导致进程终止
  3. 执行高危Shell命令(如rm、mv)时,需做好参数校验,防止误操作
Last Updated: 3/23/2026, 7:55:55 AM