您可以在本機命令行通過會話管理CLI連接到ECS實例,支持免密連接無公網實例。相比于傳統的SSH或RDP直連的方式更加安全方便。本文為您介紹會話管理CLI的基本使用。
什么是會話管理CLI?
會話管理CLI,即ali-instance-cli,是阿里云為您提供的命令行工具,在您的個人計算機上安裝并配置該工具后,即可以命令行的方式通過會話管理連接實例。
此外,在使用ali-instance-cli時, 您可以配合使用阿里云CLI工具,實現純命令行操作,關于阿里云CLI的更多信息,請參見什么是阿里云CLI。
準備工作
開啟會話管理服務
在使用ali-instance-cli之前,需要先確保當前阿里云賬號已開啟會話管理服務。開啟會話管理服務僅可以在控制臺操作,具體操作如下:
| |
|
檢查實例運行狀態是否為運行中
僅支持通過會話管理連接到運行中狀態的實例。
控制臺
阿里云CLI
如果您已經配置好了阿里云CLI,您可以通過以下命令查詢實例運行狀態。關于該API的更多參數說明,請參見DescribeInstanceStatus - 查詢實例的狀態信息列表。
以查詢杭州地域下實例ID為i-bp1******
實例為例,輸入以下命令查詢實例運行狀態。
aliyun ecs DescribeInstanceStatus --region cn-hangzhou --RegionId 'cn-hangzhou' --InstanceId.1 'i-bp1******'
如果查詢出對應實例的Status
為Running
則實例為運行中。
{
"TotalCount": 1,
"RequestId": "A413****-****-****-****-****611B",
"PageSize": 1,
"PageNumber": 1,
"InstanceStatuses": {
"InstanceStatus": [
{
"Status": "Running",
"InstanceId": "i-bp1******"
}
]
}
}
除此API外,您還可以通過其他API查詢實例運行狀態,請參見DescribeInstances - 查詢實例的詳細信息列表。
API
如果需要通過API查詢實例運行狀態,請參見DescribeInstanceStatus - 查詢實例的狀態信息列表、DescribeInstances - 查詢實例的詳細信息列表。
檢查實例云助手Agent是否已安裝
會話管理基于云助手的功能實現,您可以通過以下方式查詢實例是否已經安裝云助手Agent。
2017年12月01日之后使用官方公共鏡像創建的ECS實例,默認預裝了云助手Agent。如果您的實例是2017年12月01日之前購買的或使用自行上傳的自定義鏡像創建的實例,需自行安裝云助手Agent,請參見安裝云助手Agent。
控制臺
會話管理基于云助手的功能實現,需要在實例中安裝云助手Agent。云助手Agent狀態可以在ECS控制臺的云助手模塊查看,已經安裝云助手的實例如圖所示:
2017年12月01日之后使用官方公共鏡像創建的ECS實例,默認預裝了云助手Agent。如果您的實例是2017年12月01日之前購買的或使用自行上傳的自定義鏡像創建的實例,需自行安裝云助手Agent,請參見安裝云助手Agent。
查看云助手Agent狀態以及處理異常狀態的具體操作,請參見查看云助手狀態及異常狀態處理。
阿里云CLI
如果您已經配置好了阿里云CLI,您可以通過以下命令查詢實例是否安裝云助手且云助手版本是否支持使用會話管理。具體參數說明,請參見DescribeCloudAssistantStatus - 查詢云助手安裝狀態。
以查詢杭州地域下實例ID為i-bp1******
實例為例,輸入以下命令查詢實例運行狀態。
aliyun ecs DescribeCloudAssistantStatus --region cn-hangzhou --RegionId 'cn-hangzhou' --InstanceId.1 'i-bp1******'
如果查詢出CloudAssistantStatus
(云助手運行狀態)為true
且SupportSessionManager
(是否支持會話管理)也為true
,即該實例支持通過會話管理連接實例。
{
"TotalCount": 1,
"PageSize": 1,
"RequestId": "DB34****-****-****-****-****A749",
"NextToken": "",
"PageNumber": 1,
"InstanceCloudAssistantStatusSet": {
"InstanceCloudAssistantStatus": [
{
"CloudAssistantVersion": "2.2.3.857",
"SupportSessionManager": true,
"InstanceId": "i-bp1******",
"InvocationCount": 4,
"OSType": "Linux",
"CloudAssistantStatus": "true",
"LastHeartbeatTime": "2024-12-10T02:38:04Z",
"LastInvokedTime": "2024-12-08T16:02:45Z",
"ActiveTaskCount": 0
}
]
}
}
API
如果需要通過API查詢實例云助手Agent狀態,請參見DescribeCloudAssistantStatus - 查詢云助手安裝狀態。
準備用于使用會話管理的RAM用戶的憑證
在使用 ali-instance-cli
工具時,配置階段要求設置RAM用戶的AccessKey、STS Token。當通過會話管理操作連接實例時,系統會驗證此憑證對應的RAM用戶是否擁有ecs:StartTerminalSession
權限,這是允許通過會話管理建立與ECS實例連接的必要權限。
此外,在自定義權限策略時,可以通過指定Resource
字段來限定RAM用戶能夠通過會話管理連接的具體ECS實例。權限策略示例如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "ecs:StartTerminalSession",
"Resource": "*"
}
]
}
關于CredentialsURI、STS Token的更多說明,請參見創建AccessKey、什么是STS。
為RAM用戶授權,請參見為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 使用ali-instance-cli的會話管理功能
本機為Windows
進入命令提示符,在ali-instance-cli.exe所在目錄,輸入命令遠程連接實例。其中<instance_id>
為步驟2.1中獲取的實例ID。
ali-instance-cli.exe session --instance <instance_id>
例如連接實例ID為i-bp1******
的實例時,可輸入以下命令完成連接操作。
ali-instance-cli.exe session --instance i-bp1******
如圖所示,連接成功后,會進入對應實例的命令行界面。
本機為macOS/Linux
在終端中,進入ali-instance-cli所在目錄,輸入命令遠程連接實例。其中<instance_id>
為步驟2.1中獲取的實例ID。
./ali-instance-cli session --instance <instance_id>
例如連接實例ID為i-bp1******
的實例時,可輸入以下命令完成連接操作。
./ali-instance-cli.exe session --instance i-bp1******
如圖所示,連接成功后,會進入對應實例的命令行界面。
更多功能
除了會話管理功能外,會話管理CLI(ali-instance-cli)還有以下功能:
您可以通過ali-instance-cli的端口轉發功能,將實例的某個端口映射到您個人計算機的某個端口,支持無公網實例。由此功能,您可以實現免代理,免跳板機的訪問無公網實例上的服務。
如果您使用SSH連接實例,您可以選擇通過該功能向目標實例中注冊臨時公鑰,此時,您可以通過與之對應的私鑰連接實例。
常見問題
執行命令后卡住沒反應(實例非運行中狀態)
如果執行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
報錯,代表會話管理功能未開啟,請通過控制臺開啟會話管理功能,具體操作,請參見開啟會話管理服務。
長時間未連接自動斷開
使用會話管理連接到目標實例后,如果長時間沒有任何操作連接會自動斷開。默認的連接空閑時間為3分鐘,您可以通過--idle-timeout
參數自定義最大空閑時間。
例如執行以下命令連接到目標實例后,連接空閑達到10分鐘就會自動斷開。
./ali-instance-cli session --instance instance-id --idle-timeout 600
此功能需確保ali-instance-cli不低于以下版本:
Linux:
1.2.0.48
Windows:
1.1.0.48
macOS:
1.3.0.48
如何分析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