如果您使用第三方SSH工具以密钥对的方式认证登录Linux实例,您可以向实例中注册有效期60秒的临时公钥,然后在60秒之内使用私钥登录实例,该方式相比永久密钥对更加安全。本文为您介绍如何通过会话管理CLI(ali-instance-cli)向实例注册临时公钥并免密登录。
什么是临时公钥?
临时公钥认证是一种安全连接实例的方案,您可以不在实例中设置密钥对,然后在每次通过SSH连接实例前,向实例中注册一个有效期60秒的临时公钥,然后通过与之对应的私钥免密登录实例。
临时公钥存储在云助手服务端。
准备工作
开启会话管理服务
检查实例运行状态是否为运行中
检查实例云助手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 生成密钥对
在发送临时公钥前,您需要先在本地生成一对密钥文件,其中公钥文件将用作步骤2.3中的临时公钥。
本机为Windows
打开命令提示符,输入以下命令并根据界面提示,生成密钥对。
本示例以通过OpenSSH客户端在C:\Users\test
目录下生成密钥对为例。
ssh-keygen -t rsa -b 2048 -f id_rsa
-t rsa
:代表密钥类型为rsa
密钥对。-b 2048
:代表密钥长度为2048位。-f id_rsa
:代表生成密钥对的文件名以及保存位置。
执行这条命令后,系统会提示您输入一个私钥口令(passphrase),用于保护私钥。设置私钥口令后,即使私钥被盗,攻击者也需要私钥口令才可以使用私钥。
如果您不希望为私钥设置私钥口令,可以直接按回车键跳过。
命令执行完成后,会在当前命令行所在目录(本文以C:\Users\test
为例)下生成一对密钥文件:id_rsa.pub
(公钥)、id_rsa
(私钥)。
本机为macOS/Linux
打开终端,输入以下命令并根据界面提示,生成密钥对。
本示例以通过OpenSSH客户端生成密钥对为例。
ssh-keygen -t rsa -b 2048 -f id_rsa
-t rsa
:代表密钥类型为rsa
密钥对。-b 2048
:代表密钥长度为2048位。-f id_rsa
:代表生成密钥对的文件名以及保存位置。
执行这条命令后,系统会提示您输入一个私钥口令(passphrase),用于保护私钥。设置私钥口令后,即使私钥被盗,攻击者也需要私钥口令才可以使用私钥。
如果您不希望为私钥设置私钥口令,可以直接按回车键跳过。
命令执行完成后,会在当前命令行所在目录(本文以当前用户根目录~为例)下生成一对密钥文件:id_rsa.pub
(公钥)、id_rsa
(私钥)。
2.3 将公钥发送到实例作为临时公钥
本机为Windows
打开命令提示符,进入ali-instance-cli.exe
工具所在目录,输入以下命令向目标实例发送临时公钥。
其中<instance_id>
为待发送公钥的实例的ID,<public_key_path>
为步骤2.2中生成公钥的文件路径,<ecs_username>
为与该公钥对应的用户登录名。
ali-instance-cli.exe send_public_key --instance <instance_id> --public-key <public_key_path> --user-name <ecs_username>
例如,向实例ID为i-bp1******
的实例的ecs-user
用户注册临时公钥,本地公钥存储路径为C:\Users\test\id_rsa.pub
,可通过以下命令实现。
ali-instance-cli.exe send_public_key --instance i-bp1****** --public-key C:\Users\test\id_rsa.pub --user-name ecs-user
命令执行成功后请在60秒之内登录实例。
本机为macOS/Linux
打开终端,进入ali-instance-cli
工具所在目录,输入以下命令向目标实例发送临时公钥。
其中<instance_id>
为待发送公钥的实例的ID,<public_key_path>
为步骤2.2中生成公钥的文件路径,<ecs_username>
为与该公钥对应的用户登录名。
./ali-instance-cli send_public_key --instance <instance_id> --public-key <public_key_path> --user-name <ecs_username>
例如,向实例ID为i-bp1******
的实例的ecs-user
用户注册临时公钥,本地公钥存储路径为~/id_rsa.pub
,可通过以下命令实现。
./ali-instance-cli send_public_key --instance i-bp1****** --public-key ~/id_rsa.pub --user-name ecs-user
命令执行成功后请在60秒之内登录实例。
3. 以SSH的方式连接实例
如果在连接实例时提示输入密码或公钥不正确,请确认您的公钥是否已经过期。临时公钥有效期为60s。
选择合适的SSH工具连接实例,在本机命令提示符或终端,输入以下命令连接实例。
其中<private_key_path>
为步骤2.2中生成的私钥文件路径,<ecs-username>
为实例登录名,对应步骤2.3中被设置临时公钥的用户,<ecs_ip>
为您ECS实例的公网IP。
ssh -i <private_key_path> <ecs-username>@<ecs_ip>
例如,私钥文件路径~/id_rsa
,登录名称为ecs-user
,实例公网IP为223.***.***.187
可通过以下命令连接实例。
ssh -i ~/id_rsa ecs-user@223.***.***.187
此外,您也可以结合ali-instance-cli
工具的端口转发功能,实现登录无公网实例。具体操作,请参见通过会话管理CLI的端口转发访问无公网实例。