通过会话管理CLI的端口转发访问无公网实例

会话管理CLI(ali-instance-cli)通过云助手与WebSocket实现TCP端口转发,该功能既支持直接访问无公网IP的实例中的业务服务,也支持以跳板机方式访问其他私网服务。

应用场景

场景一:访问无公网ECS实例中的服务。

将无公网ECS实例的服务端口(如Nginx80、SSH22、RDP3389MySQL3306),由会话管理通道映射到本机特定端口,通过访问本机端口,访问无公网实例中的服务。

image

场景二:以某台实例为跳板,访问其他私网主机上的服务。

对于RDS MySQL数据库等其他私网服务,无法直接建立端口转发通道。因此需要选择一台与目标服务网络互通的ECS实例作为跳板机,通过该实例的网络能力访问其他私网服务。

image
重要

端口转发会话依赖于运行的命令行窗口。请保持该窗口开启,一旦关闭,转发将立即终止。

场景一:访问无公网ECS实例中的服务

确保已完成准备工作且已安装&配置会话管理CLI的情况下,执行以下操作。

本地为Windows环境

PowerShell中,进入ali-instance-cli.exe所在目录,执行以下命令。

#将INSTANCE_ID替换为需要端口转发的实例的ID,将TARGET_PORT替换为目标ECS实例的端口,将LOCAL_PORT替换为需要映射到本机的端口。
.\ali-instance-cli.exe portforward -i INSTANCE_ID -r TARGET_PORT -l LOCAL_PORT

输出Waiting for connections,表示端口转发已就绪。此时访问127.0.0.1:<local_port>相当于访问实例中<ecs_port>端口的服务。

以将目标ECS实例i-bp1******Nginx默认端口80转发到本机的8080为例,需执行.\ali-instance-cli.exe portforward -i i-bp1****** -r 80 -l 8080

本地为macOS/Linux环境

终端中,进入ali-instance-cli所在目录,执行以下命令。

#请将INSTANCE_ID替换为需要端口转发的实例的ID,将TARGET_PORT替换为目标ECS实例的端口,将LOCAL_PORT替换为需要映射到本机的端口。
./ali-instance-cli portforward -i INSTANCE_ID -r TARGET_PORT -l LOCAL_PORT

输出Waiting for connections,表示端口转发已就绪。此时访问127.0.0.1:<local_port>相当于访问实例中<ecs_port>端口的服务。

以将目标ECS实例i-bp1******Nginx默认端口80转发到本机的8080为例,需执行./ali-instance-cli portforward -i i-bp1****** -r 80 -l 8080

场景二:以某台实例为跳板,访问其他私网主机上的服务

确保已完成准备工作且已安装&配置会话管理CLI的情况下,执行以下操作。

本地为Windows环境

打开PowerShell,进入ali-instance-cli.exe所在目录,执行以下命令:

#请将INSTANCE_ID替换为作为跳板机实例的ID,将TARGET_IP替换为目标主机的IP,将TARGET_PORT替换为目标主机的端口,将LOCAL_PORT替换为需要映射到本机的端口。
.\ali-instance-cli.exe portforward -i INSTANCE_ID -r TARGET_IP:TARGET_PORT -l LOCAL_PORT

输出Waiting for connections,表示跳板通道已建立。此时访问127.0.0.1:<local_port>流量将经跳板机转发至<target_ip>:<target_port>

以通过ECS跳板机 i-bp1******,将RDS MySQL的内网地址 rm-******:3306转发至本地的 13306 端口为例。需执行.\ali-instance-cli.exe portforward -i i-bp1****** -r rm-******.mysql.rds.aliyuncs.com:3306 -l 13306

本地为macOS/Linux环境

打开终端,进入ali-instance-cli所在目录,执行以下命令。

#请将INSTANCE_ID替换为作为跳板机实例的ID,将TARGET_IP替换为目标主机的IP,将TARGET_PORT替换为目标主机的端口,将LOCAL_PORT替换为需要映射到本机的端口。
./ali-instance-cli portforward -i INSTANCE_ID -r TARGET_IP:TARGET_PORT -l LOCAL_PORT

输出Waiting for connections,表示跳板通道已建立。此时访问127.0.0.1:<local_port>流量将经跳板机转发至<target_ip>:<target_port>

以将云数据库 RDS MySQL 版的实例(内网地址 rm-******.mysql.rds.aliyuncs.com:3306)通过ECS实例跳板机i-bp1******映射至本地 13306 端口。需执行./ali-instance-cli portforward -i i-bp1****** -r rm-******.mysql.rds.aliyuncs.com:3306 -l 13306

常见问题

执行命令后卡住没反应(实例非运行中状态)

如果执行ali-instance-cli命令后命令行卡住没反应,可能是实例没有处于运行中状态,如何查看实例状态,请参见本文准备工作章节下的检查实例运行状态是否为运行中

执行命令后卡住没反应(安全组设置问题)

如果执行ali-instance-cli命令后命令行卡住没反应,可能是没有在安全组出方向放通对应的端口。默认情况下普通安全组会在出方向放通所有端口的访问,如果更改了出方向规则或者使用了企业安全组,则可能会出现该问题。相关安全组说明如下:

通过会话管理连接ECS实例时,需要确保ECS中运行的云助手Agent与云助手服务端的网络连通性,即在安全组出方向设置以下规则:

SSH、RDP等连接方式不同,由于会话管理是由云助手Agent主动与会话管理服务端建立WebSocket连接,因此仅需放行出方向的云助手服务端的WebSocket端口。关于会话管理的原理,请参见会话管理工作原理
重要
  • 如果使用普通安全组(包括默认安全组),默认情况下会放行所有的出方向流量,无需配置

  • 如果使用企业安全组,默认情况下会禁用所有出方向的流量,需要配置以下规则。更多关于企业安全组的说明,请参见普通安全组与企业级安全组

添加安全组规则的具体操作,请参见添加安全组规则

授权策略

优先级

协议类型

端口范围

授权对象

描述

允许

1

自定义TCP

443

100.100.0.0/16

用于访问云助手服务端。

允许

1

自定义TCP

443

100.0.0.0/8

访问云助手Agent安装包所在服务器,用于安装或更新您的云助手Agent

允许

1

自定义UDP

53

0.0.0.0/0

用于解析域名。

此外,如果您计划仅通过会话管理连接实例,为了增加ECS实例的安全性,您可以取消放行安全组入方向上的SSH端口(默认22)或者RDP端口(默认3389)的规则。

执行命令后出现DeliveryTimeout提示(云助手Agent不在线)

如果执行ali-instance-cli的命令时出现DeliveryTimeout提示,可能是云助手Agent不在线,检查云助手状态,请参见检查实例云助手Agent是否已安装

执行命令报错session manager is disabled, please enable first

如果执行ali-instance-cli的命令出现session manager is disabled, please enable first报错,代表会话管理功能未开启,请通过控制台开启会话管理功能,具体操作,请参见开启会话管理服务

如何分析ali-instance-cli的日志

当使用会话管理CLI出现问题时,可以通过查看log分析具体问题。

  • 查看会话管理CLI工具的日志:在使用会话管理CLI(ali-instance-cli)时,会在该工具所在目录下生成log目录,如~/log/aliyun_ecs_session_log.2022XXXX,可以进入该目录查看相关日志。

  • 查看云助手Agent日志:

    • Linux

      /usr/local/share/aliyun-assist/云助手版本号/log/
    • Windows

      C:\ProgramData\aliyun\assist\云助手版本号\log