会话管理CLI(ali-instance-cli)通过云助手与WebSocket实现TCP端口转发,该功能既支持直接访问无公网IP的实例中的业务服务,也支持以跳板机方式访问其他私网服务。
应用场景
场景一:访问无公网ECS实例中的服务。 将无公网ECS实例的服务端口(如Nginx的 | 场景二:以某台实例为跳板,访问其他私网主机上的服务。 对于RDS MySQL数据库等其他私网服务,无法直接建立端口转发通道。因此需要选择一台与目标服务网络互通的ECS实例作为跳板机,通过该实例的网络能力访问其他私网服务。 |
端口转发会话依赖于运行的命令行窗口。请保持该窗口开启,一旦关闭,转发将立即终止。
场景一:访问无公网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 |
| 用于访问云助手服务端。 |
允许 | 1 | 自定义TCP | 443 |
| 访问云助手Agent安装包所在服务器,用于安装或更新您的云助手Agent。 |
允许 | 1 | 自定义UDP | 53 |
| 用于解析域名。 |
此外,如果您计划仅通过会话管理连接实例,为了增加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