您可以使用会话管理CLI(ali-instance-cli),以命令行的方式,将实例的某个端口转发到本机,通过云助手间接访问实例中的业务服务,支持访问无公网实例。本文为您介绍通过会话管理CLI进行端口转发,访问无公网实例。
什么是端口转发?
会话管理CLI(ali-instance-cli)的端口转发功能,基于云助手实现,可以将某台实例的端口映射到本机(即在主机安装ali-instance-cli),此外,也可以将某台实例作为跳板机,映射其他网络可达主机的端口,从而访问无公网或者私网环境中部署的服务。
场景一:远程连接无公网实例
可以通过端口转发功能,将无公网ECS实例的远程访问端口映射到本地,通过工具访问本地的对应端口,实现连接无公网实例。
如果您的实例开通了公网IP,使用该方式连接实例时,您可以在安全组禁用实例的远程访问端口,增加实例安全性。
场景二:访问无公网实例中的服务
可以通过端口转发功能,将无公网ECS实例的某个服务端口,如Nginx、Apache等服务的端口,映射到本机的某个端口,通过访问本机端口,实现访问无公网实例中部署的服务。
场景三:以某台实例为跳板,访问其他主机上的服务
可以通过端口转发功能,以某台实例为跳板,访问和该实例处于同一VPC下某个网络主机上的服务。例如访问私网部署的MySQL服务。
端口转发实现原理
| |
|
准备工作
开启会话管理服务
检查实例运行状态是否为运行中
检查实例云助手Agent是否已安装
准备用于使用会话管理的RAM用户的凭证
1. 安装&配置会话管理CLI
如果您已经安装并配置完成会话管理CLI,可跳过本步骤。
1.1 安装
首先需要在您的个人计算机中安装会话管理CLI(ali-instance-cli),不同操作系统安装方式不同,具体操作如下。
Windows
点击下载Windows版ali-instance-cli,并保存到本地文件夹中。
本文以将ali-instance-cli.exe保存在C:\Users\test
文件夹中为例。
macOS
在macOS的终端中,输入以下命令下载mac版ali-instance-cli。
curl -O https://aliyun-client-assist.oss-accelerate.aliyuncs.com/session-manager/mac/ali-instance-cli
下载完成后,输入以下命令为ali-instance-cli赋予可执行权限。
chmod a+x ali-instance-cli
Linux
输入以下命令安装Linux版ali-instance-cli。
curl -O https://aliyun-client-assist.oss-accelerate.aliyuncs.com/session-manager/linux/ali-instance-cli
下载完成后,输入以下命令为ali-instance-cli赋予可执行权限。
chmod a+x ali-instance-cli
1.2 配置
在您的个人计算机使用ali-instance-cli连接阿里云实例时,需要配置相关身份凭证,即AccessKey,具体说明,请参见准备用于使用会话管理的RAM用户的凭证。
Windows
选择
,输入cmd,按Enter
键,打开命令提示符窗口。切换到ali-instance-cli.exe所在目录,本文以
C:\Users\test
为例。cd C:\Users\test
配置凭证。支持以下三种配置方式:
AccessKey
执行如下命令,并根据界面提示配置Access Key Id、Access Key Secret、Region Id。
ali-instance-cli.exe configure --mode AK
STS Token
执行以下命令完成配置操作:
ali-instance-cli.exe configure set --mode StsToken --region "<region>" --access-key-id "<ak>" --access-key-secret "<sk>" --sts-token "<sts_token>"
<region>
、<ak>
、<sk>
、<sts_token>
要修改为实际的Region ID、AccessKey ID、AccessKey Secret和STS Token
。CredentialsURI
执行如下命令,根据界面提示,输入Credentials URI和Region Id。
ali-instance-cli.exe configure --mode=CredentialsURI
配置完成后,显示如下内容证明配置完成。
macOS/Linux
进入ali-instance-cli所在目录,本文以当前用户根目录
~
为例。cd ~
配置凭证。
AccessKey
执行如下命令,并根据界面提示配置Access Key Id、Access Key Secret、Region Id。
./ali-instance-cli configure --mode AK
STS Token
执行以下命令完成配置操作:
./ali-instance-cli configure set --mode StsToken --region "<region>" --access-key-id "<ak>" --access-key-secret "<sk>" --sts-token "<sts_token>"
<region>
、<ak>
、<sk>
、<sts_token>
要修改为实际的Region ID、AccessKey ID、AccessKey Secret和STS Token
。CredentialsURI
执行如下命令,根据界面提示,配置Credentials URI和Region Id。
./ali-instance-cli configure --mode=CredentialsURI
配置完成后,显示如下内容证明配置完成。
2. 端口转发功能基本使用
2.1 获取待转发端口实例的ID
在开始端口转发之前,需要先获取待转发端口的实例ID,以供后续步骤使用。
控制台
|
阿里云CLI
如果您已经配置好了阿里云CLI,您可以通过以下命令获取实例ID。具体参数说明,请参见DescribeInstances - 查询实例的详细信息列表。
以查询杭州地域下名称为SessionManager-example
的实例为例。
aliyun ecs DescribeInstances --region cn-hangzhou --RegionId 'cn-hangzhou' --InstanceName 'SessionManager-example'
返回结果中InstanceId
即实例ID。
API
通过API查询实例ID,请参见DescribeInstances - 查询实例的详细信息列表。
2.2 使用端口转发
用法一:直接转发实例端口
本机为Windows
使用端口转发过程中请不要关闭命令提示符窗口,关闭命令提示符窗口后,端口转发也会终止。
进入命令提示符,在ali-instance-cli.exe所在目录,输入命令开启端口映射。
ali-instance-cli.exe portforward -i <instance_id> -r <target_port> -l <local_port>
在使用时,请将<instance_id>
替换为需要端口转发的实例的ID,将<target_port>
替换为目标ECS实例的端口,将<local_port>
替换为需要映射到本机的端口。
如图所示,端口转发成功后,会进入等待连接状态,此时在本机访问127.0.0.1:<local_port>
相当于访问实例的<ecs_port>
端口的服务。
本机为macOS/Linux
使用端口转发过程中请不要关闭当前终端,关闭终端后,端口转发也会终止。
在终端中,进入ali-instance-cli所在目录,输入命令开启端口映射。
./ali-instance-cli portforward -i <instance_id> -r <target_port> -l <local_port>
在使用时,请将<instance_id>
替换为需要端口转发的实例的ID,将<target_port>
替换为目标ECS实例的端口,将<local_port>
替换为需要映射到本机的端口。
如图所示,端口转发成功后,会进入等待连接状态。此时在本机访问127.0.0.1:<local_port>
相当于访问实例的<target_port>
端口的服务。
用法二:以某台ECS实例为跳板机,转发其他主机的端口
您可以通过会话管理CLI与某台ECS实例建立会话管理连接,以该ECS实例为跳板机访问其他主机的某个端口。
本机为Windows
使用端口转发过程中请不要关闭命令提示符窗口,关闭命令提示符窗口后,端口转发也会终止。
进入命令提示符,在ali-instance-cli.exe所在目录,输入命令开启端口映射。
ali-instance-cli.exe portforward -i <instance_id> -r <target_ip>:<target_port> -l <local_port>
在使用时,请将<instance_id>
替换为作为跳板机实例的ID,将<target_ip>
替换为目标主机的IP,将<target_port>
替换为目标主机的端口,将<local_port>
替换为需要映射到本机的端口。
如图所示,端口转发成功后,会进入等待连接状态,此时在本机访问127.0.0.1:<local_port>
相当于访问主机地址为<target_ip>
端口号为<target_port>
的服务。
本机为macOS/Linux
使用端口转发过程中请不要关闭当前终端,关闭终端后,端口转发也会终止。
在终端中,进入ali-instance-cli所在目录,输入命令开启端口映射。
./ali-instance-cli portforward -i <instance_id> -r <target_ip>:<target_port> -l <local_port>
在使用时,请将<instance_id>
替换为作为跳板机实例的ID,将<target_ip>
替换为目标主机的IP,将<target_port>
替换为目标主机的端口,将<local_port>
替换为需要映射到本机的端口。
如图所示,端口转发成功后,会进入等待连接状态,此时在本机访问127.0.0.1:<local_port>
相当于访问主机地址为<target_ip>
端口号为<target_port>
的服务。
场景示例
示例一:远程连接无公网实例
示例架构
通过端口转发功能,您可以远程连接无公网的ECS实例。
操作步骤
连接Linux实例
开启端口转发。
首先需要将目标SSH服务的服务端口(默认为22)转发到本机的8080。具体操作如下:
重要开启端口转发后,关闭当前命令提示符或终端会导致连接中断。
本机为Windows
打开命令提示符,进入
ali-instance-cli.exe
工具所在目录,输入以下命令完成端口转发操作。ali-instance-cli.exe portforward -i i-bp1****** -r 22 -l 8080
本命令中,
-i
参数值i-bp1******
是被连接实例的ID,-r
参数值22
为实例SSH服务的远程访问端口,-l
参数值的8080
代表转发到本机的8080端口。本机为macOS/Linux
打开终端,进入
ali-instance-cli
工具所在目录,输入以下命令完成端口转发操作。./ali-instance-cli portforward -i i-bp1****** -r 22 -l 8080
本命令中,
-i
参数值i-bp1******
是被连接实例的ID,-r
参数值22
为实例SSH服务的远程访问端口,-l
参数值的8080
代表转发到本机的8080端口。远程连接实例。
开启端口映射后,您可以直接访问本机的8080端口远程连接目标实例。
远程主机地址:
127.0.0.1
。远程主机SSH服务端口号:
8080
。
本示例以使用OpenSSH客户端为例,您可以根据偏好,选择合适的远程连接工具。
端口转发:
通过
127.0.0.1:8080
连接实例:
连接Windows实例
开启端口转发。
首先需要将目标RDP服务的端口(默认为3389)转发到本机的8080。具体操作如下:
重要开启端口转发后,关闭当前命令提示符或终端会导致连接中断。
本机为Windows
打开命令提示符,进入
ali-instance-cli.exe
工具所在目录,输入以下命令完成端口转发操作。ali-instance-cli.exe portforward -i i-bp1****** -r 3389 -l 8080
本命令中,
-i
参数值i-bp1******
是被连接实例的ID,-r
参数值3389
为实例RDP服务的远程访问端口,-l
参数值的8080
代表转发到本机的8080端口。本机为macOS/Linux
打开终端,进入
ali-instance-cli
工具所在目录,输入以下命令完成端口转发操作。./ali-instance-cli portforward -i i-bp1****** -r 3389 -l 8080
本命令中,
-i
参数值i-bp1******
是被连接实例的ID,-r
参数值3389
为实例RDP服务的远程访问端口,-l
参数值的8080
代表转发到本机的8080端口。远程连接实例。
开启端口映射后,您可以直接访问本机的8080端口远程连接目标实例。
远程计算机:
127.0.0.1:8080
。
以使用Windows远程桌面连接ECS实例为例,您可以根据您的偏好,选择合适的远程连接工具。
端口转发:
通过
127.0.0.1:8080
远程连接Windows实例:
示例二:访问某台无公网ECS上的Nginx服务
示例架构
操作步骤
开启端口转发。
首先需要将目标Nginx服务的端口(80)转发到本机的8080。具体操作如下:
重要开启端口转发后,关闭当前命令提示符或终端会导致连接中断。
本机为Windows
打开命令提示符,进入
ali-instance-cli.exe
工具所在目录,输入以下命令完成端口转发操作。ali-instance-cli.exe portforward -i i-bp1****** -r 80 -l 8080
本命令中,
-i
参数值i-bp1******
是被访问实例的ID,-r
参数值80
为实例Nginx服务的端口,-l
参数值8080
代表转发到本机的8080端口。本机为macOS/Linux
打开终端,进入
ali-instance-cli
工具所在目录,输入以下命令完成端口转发操作。./ali-instance-cli portforward -i i-bp1****** -r 80 -l 8080
本命令中,
-i
参数值i-bp1******
是被访问实例的ID,-r
参数值80
为实例Nginx服务的端口,-l
参数值8080
代表转发到本机的8080端口。访问Nginx服务。
以在浏览器访问Nginx服务的默认页面为例。
端口转发:
通过
http://127.0.0.1:80
访问Nginx服务的默认页面:
示例三:以某台ECS为跳板,通过访问私网MySQL服务
示例说明
如图所示,本示例以ID为i-bp1******
的实例为跳板机,通过内网访问云数据库 RDS MySQL 版的MySQL数据库实例,其中,RDS实例的内网地址为rm-******.mysql.rds.aliyuncs.com
。
本示例已确保ECS与RDS的网络连通。
操作步骤
开启端口转发。
首先需要将目标MySQL服务的服务端口(默认为3306)转发到本机的13306。具体操作如下:
重要开启端口转发后,关闭当前命令提示符或终端会导致连接中断。
本机为Windows
打开命令提示符,进入
ali-instance-cli.exe
工具所在目录,输入以下命令完成端口转发操作。ali-instance-cli.exe portforward -i i-bp1****** -r rm-******.mysql.rds.aliyuncs.com:3306 -l 13306
本命令中,
-i
参数值i-bp1******
是作为跳板机ECS实例的ID,-r
参数值rm-******.mysql.rds.aliyuncs.com:3306
为MySQL的内网访问地址以及端口号,-l
参数值13306
代表转发到本机的13306端口。本机为macOS/Linux
打开终端,进入
ali-instance-cli
工具所在目录,输入以下命令完成端口转发操作。./ali-instance-cli portforward -i i-bp1****** -r rm-******.mysql.rds.aliyuncs.com:3306 -l 13306
本命令中,
-i
参数值i-bp1******
是作为跳板机ECS实例的ID,-r
参数值rm-******.mysql.rds.aliyuncs.com:3306
为MySQL的内网访问地址以及端口号,-l
参数值13306
代表转发到本机的13306端口。通过MySQL客户端访问MySQL数据库。
开启端口映射后,您可以直接访问本机的13306端口,访问目标主机上的MySQL服务。
以MySQL客户端操作为例,您可以根据您的偏好,选择合适的连接工具。
端口转发:
通过
127.0.0.1:13306
访问MySQL服务: