通过ali-instance-cli注册公钥免密登录实例

本文介绍如何使用ali-instance-cli的子命令send_public_key注册公钥并免密登录实例。

前提条件

背景信息

使用ali-instance-cli子命令send_public_key,可以将SSH公钥发送到目标实例内部供指定用户使用,密钥保留60s。在60s内,您可以通过SSH公钥登录的方式进入实例,无需输入密码。

会话管理客户端支持Linux、macOS和Windows操作系统,不同操作系统使用方式不同,具体说明如下:

Linux或macOS操作系统

说明

本文操作以test用户为例,具体操作以您实际操作的用户和用户目录为准。

  1. 登录会话管理客户端。

  2. 在会话管理客户端安装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
  3. 可选:创建config文件并添加相关配置。

    使用instance_id登录到目录实例时,需执行该步骤。

    1. 在当前用户目录下创建.ssh目录,本文以/home/test为例。

      mkdir .ssh
    2. 切换到.ssh目录下。

      cd .ssh
    3. 创建并打开config文件。

      vim config
    4. i进入编辑模式。

    5. config文件中添加如下内容。

      说明

      ali-instance-cli需要替换成文件的绝对路径,例如/home/test/ali-instance-cli

      host i-*
          ProxyCommand sh -c "ali-instance-cli ssh -i '%h' --port  '%p'" 
    6. Esc键,退出编辑模式。

    7. 输入:wq,并按Enter键,保存并退出。

    8. config文件添加执行权限。

      chmod 755 config
  4. 配置AccessKey、STS Token。

    关于如何获取AccessKey或STS Token,请参见创建AccessKey什么是STS

    1. 切换到test目录。

      cd /home/test
    2. 配置鉴权认证方式。

      支持以下两种配置方式:

      • AccessKey配置方式

        执行如下命令,根据界面提示,输入AccessKey ID、AccessKey Secret、RegionID。

        ./ali-instance-cli configure --mode AK
      • STS Token配置方式

        说明

        regionaksktoken要修改为实际的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"

      当回显如下图所示时,说明鉴权方式已配置完成。AK.png

  5. 在会话管理客户端,执行如下命令,生成RSA类型的公钥与密钥文件。

    ssh-keygen -t rsa

    根据界面提示,按Enter,当界面显示如下所示时,说明公钥与密钥文件已生成。生成公钥

    说明

    生成的公钥路径默认为~/.ssh/id_rsa.pub。

  6. 在会话管理客户端中,发送SSH公钥到目标实例中。

    ./ali-instance-cli send_public_key --instance <instance-id> --public-key "<本地公钥文件的内容或者文件路径>" --user-name testuser
    说明

    --user-name参数指定公钥的用户名,以上命令中testuser仅为示例。如果不指定默认为root。指定的用户名需要确保在目标实例上已经存在。

  7. 运行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修改成您远程登录目标实例ID;testuser修改成您远程登录的用户名。

    当回显如下图所示时,说明已经通过Session Manager转发SSH方式连接到目标实例。连接实例

Windows操作系统

使用会话管理客户端的Windows操作系统已安装OpenSSH,具体操作,请参见使用云助手在Windows实例中安装OpenSSH程序

说明

本文操作以test用户为例,具体操作以您实际操作的用户和用户目录为准。

  1. 登录会话管理客户端。

  2. 在会话管理客户端下载安装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

  3. 可选:创建config文件并添加相关配置。

    使用instance_id登录到目录实例时,执行该步骤。

    1. C:\Users\username下创建.ssh文件夹。

      说明

      C:\Users\username需替换成实际的文件夹,如C:\Users\test

      1. 在桌面左下角单击win2016 搜索.png图标,然后在搜索框输入Windows PowerShell

      2. 单击Windows PowerShell

      3. C:\Users\username下,执行mkdir .ssh命令,创建.ssh文件夹。

    2. .ssh文件夹下创建config文件。

      重要

      config文件名中不能含有扩展名。

      中文文件.png
    3. 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'"
  4. 配置AccessKey或STS Token。

    关于如何获取AccessKey或STS Token,请参见创建AccessKey什么是STS

    1. 选择开始 > 运行,输入cmd,按Enter键,打开命令提示符窗口。

    2. 切换到test目录。

      cd C:\Users\test
    3. 配置鉴权认证方式。

      支持以下两种配置方式:

      • AccessKey配置方式

        执行如下命令,根据界面提示,输入AccessKey ID、AccessKey Secret、RegionID。

        .\ali-instance-cli.exe configure --mode AK
      • STS Token配置方式

        说明

        regionaksktoken要修改为实际的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"

      当回显如下图所示时,说明鉴权方式已配置完成。

      windows AK(新).png
  5. 在会话管理客户端,执行如下命令,生成RSA类型的公钥与密钥文件。

    ssh-keygen -t rsa

    根据界面提示,按Enter,当界面显示如下所示时,说明公钥与密钥文件已生成。生成密钥

    说明

    生成的公钥路径默认为C:\Users\Administrator/.ssh/id_rsa.pub。

  6. 在会话管理客户端中,发送SSH公钥到目标实例中。

    .\ali-instance-cli.exe send_public_key --instance <instance-id> --public-key "<本地公钥文件的内容或者文件路径>" --user-name testuser
    说明

    --user-name参数指定公钥的用户名,以上命令中testuser仅为示例。如果不指定默认为root。指定的用户名需要确保在目标实例上已经存在。

  7. 运行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修改成您远程登录目标实例ID;testuser修改成您远程登录的用户名。

    当回显如下图所示时,说明已经通过Session Manager转发SSH方式连接到目标实例。连接实例

常见问题

为什么免密登录时提示输入密码?

公钥注册完成之后,有效期只有60s,注册公钥之后,免密登录如果提示需要密码,请确认您的公钥是否已经过期。