本文介绍如何使用ali-instance-cli的子命令send_public_key注册公钥并免密登录实例。
前提条件
- 目标实例必须为Linux系统,并且需要连接的目标实例中已安装云助手Agent,Linux客户端版本大于等于2.2.3.256。具体操作,请参见安装云助手Agent和升级或禁止升级。
- 目标实例所在账号已开启会话管理功能,具体操作,请参见通过会话管理连接实例。
背景信息
使用ali-instance-cli子命令send_public_key,可以将SSH公钥发送到目标实例内部供指定用户使用,密钥保留60s。在60s内,您可以通过SSH公钥登录的方式进入实例,无需输入密码。
会话管理客户端支持Linux、macOS和Windows操作系统,不同操作系统使用方式不同,具体说明如下:
Linux或macOS操作系统
- 登录会话管理客户端。
- 在会话管理客户端安装ali-instance-cli。不同操作系统的客户端安装方式不同,具体说明如下:
- Linux
curl -O https://aliyun-client-assist.oss-accelerate.aliyuncs.com/session-manager/linux/ali-instance-cli chmod a+x ali-instance-cli
- macOS:
curl -O https://aliyun-client-assist.oss-accelerate.aliyuncs.com/session-manager/mac/ali-instance-cli chmod a+x ali-instance-cli
- Linux
- 可选:创建
config
文件并添加相关配置。使用instance_id登录到目录实例时,需执行该步骤。- 在当前用户目录下创建
.ssh
目录,本文以/home/test为例。mkdir .ssh
- 切换到
.ssh
目录下。cd .ssh
- 创建并打开
config
文件。vim config
- 按
i
进入编辑模式。 - 在
config
文件中添加如下内容。说明 ali-instance-cli需要替换成文件的绝对路径,例如/home/test/ali-instance-cli
。host i-* ProxyCommand sh -c "ali-instance-cli ssh -i '%h' --port '%p'"
- 按
Esc
键,退出编辑模式。 - 输入
:wq
,并按Enter
键,保存并退出。 - 为
config
文件添加执行权限。chmod 755 config
- 在当前用户目录下创建
- 配置AccessKey、STS Token。关于如何获取AccessKey或STS Token,请参见创建AccessKey和什么是STS。
- 切换到test目录。
cd /home/test
- 配置鉴权认证方式。
支持以下两种配置方式:
- AccessKey配置方式执行如下命令,根据界面提示,输入AccessKey ID、AccessKey Secret、RegionID。
./ali-instance-cli configure --mode AK
- STS Token配置方式说明 region、ak、sk、token要修改为实际的Region ID、AccessKey ID、AccessKey Secret和STS Token。
./ali-instance-cli configure set --mode StsToken --region "region" --access-key-id "ak" --access-key-secret "sk" --sts-token "token"
当回显如下图所示时,说明鉴权方式已配置完成。 - AccessKey配置方式
- 切换到test目录。
- 在会话管理客户端,执行如下命令,生成RSA类型的公钥与密钥文件。
ssh-keygen -t rsa
根据界面提示,按Enter,当界面显示如下所示时,说明公钥与密钥文件已生成。说明 生成的公钥路径默认为~/.ssh/id_rsa.pub。 - 在会话管理客户端中,发送SSH公钥到目标实例中。
./ali-instance-cli send_public_key --instance <instance-id> --public-key "<本地公钥文件的内容或者文件路径>" --user-name testuser
说明 --user-name参数指定公钥的用户名,以上命令中testuser仅为示例。如果不指定默认为root。指定的用户名需要确保在目标实例上已经存在。 - 运行SSH命令免密登录目标实例。
支持以下两种方式登录目标实例:
- 通过公网IP地址免密登录到目标实例。
ssh -i ~/.ssh/id_rsa testuser@instance_ip
说明 使用过程中,请将~/.ssh/id_rsa修改成实际的密钥路径;instance_ip修改成您远程登录目标实例的IP;testuser修改成您远程登录的用户名。 - 使用instance_id免密登录到目标实例。
ssh -i ~/.ssh/id_rsa testuser@instance_id
说明 使用过程中,请将~/.ssh/id_rsa修改成实际的密钥路径;instance_id修改成您远程登录目标实例的IP地址;testuser修改成您远程登录的用户名。
当回显如下图所示时,说明已经通过Session Manager转发SSH方式连接到目标实例。 - 通过公网IP地址免密登录到目标实例。
Windows操作系统
使用会话管理客户端的Windows操作系统已安装OpenSSH,具体操作,请参见使用云助手在Windows实例中安装OpenSSH程序。
- 登录会话管理客户端。
- 在会话管理客户端下载安装ali-instance-cli。不同操作系统的客户端安装方式不同,具体说明如下:
- 使用OpenSSH客户端下载。
Invoke-WebRequest -Uri "https://aliyun-client-assist.oss-cn-beijing.aliyuncs.com/session-manager/windows/ali-instance-cli.exe" -OutFile <destination>
说明 <destination>请修改成实际的本地路径。 - 使用浏览器下载。
下载Windows版ali-instance-cli并保存到本地文件夹中,如
C:\Users\test
。
- 使用OpenSSH客户端下载。
- 可选:创建
config
文件并添加相关配置。使用instance_id登录到目录实例时,执行该步骤。- 在C:\Users\username下创建
.ssh
文件夹。说明 C:\Users\username需替换成实际的文件夹,如C:\Users\test
。 - 在
.ssh
文件夹下创建config
文件。 - 在
config
文件中添加如下内容。ali-instance-cli.exe需要替换成文件的绝对路径,例如
C:\Users\test\ali-instance-cli.exe
。host i-* ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "ali-instance-cli.exe ssh -i '%h' --port '%p'"
- 在C:\Users\username下创建
- 配置AccessKey或STS Token。关于如何获取AccessKey或STS Token,请参见创建AccessKey和什么是STS。
- 选择cmd,按
Enter
键,打开命令提示符窗口。 ,输入 - 切换到test目录。
cd C:\Users\test
- 配置鉴权认证方式。
支持以下两种配置方式:
- AccessKey配置方式执行如下命令,根据界面提示,输入AccessKey ID、AccessKey Secret、RegionID。
.\ali-instance-cli.exe configure --mode AK
- STS Token配置方式说明 region、ak、sk、token要修改为实际的Region ID、AccessKey ID、AccessKey Secret和STS Token。
.\ali-instance-cli.exe configure set --mode StsToken --region "region" --access-key-id "ak" --access-key-secret "sk" --sts-token "token"
当回显如下图所示时,说明鉴权方式已配置完成。
- AccessKey配置方式
- 选择cmd,按
- 在会话管理客户端,执行如下命令,生成RSA类型的公钥与密钥文件。
ssh-keygen -t rsa
根据界面提示,按Enter,当界面显示如下所示时,说明公钥与密钥文件已生成。说明 生成的公钥路径默认为C:\Users\Administrator/.ssh/id_rsa.pub。 - 在会话管理客户端中,发送SSH公钥到目标实例中。
.\ali-instance-cli.exe send_public_key --instance <instance-id> --public-key "<本地公钥文件的内容或者文件路径>" --user-name testuser
说明 --user-name参数指定公钥的用户名,以上命令中testuser仅为示例。如果不指定默认为root。指定的用户名需要确保在目标实例上已经存在。 - 运行SSH命令免密登录目标实例。
- 通过公网IP免密登录到目标实例。
ssh -i ~/.ssh/id_rsa testuser@instance_ip
说明 使用过程中,请将~/.ssh/id_rsa修改成实际的密钥路径;instance_ip修改成您远程登录目标实例的IP;testuser修改成您远程登录的用户名。 - 使用instance_id免密登录到目标实例。
ssh -i ~/.ssh/id_rsa testuser@instance_id
说明 使用过程中,请将~/.ssh/id_rsa修改成实际的密钥路径;instance_id修改成您远程登录目标实例的IP;testuser修改成您远程登录的用户名。
当回显如下图所示时,说明已经通过Session Manager转发SSH方式连接到目标实例。 - 通过公网IP免密登录到目标实例。