通过config_ecs_instance_connect插件注册公钥免密连接Linux实例

本文介绍如何通过config_ecs_instance_connect插件注册公钥免密连接Linux实例。

功能介绍

config_ecs_instance_connect是阿里云提供的用于连接Linux实例的插件。使用该插件,用户可以无需密码、安全、快速地连接指定的Linux实例,提高连接效率和安全性。

  • 技术原理:该方式是基于config_ecs_instance_connect插件和云助手公共命令,将SSH公钥发送到指定实例内部,供指定用户使用。密钥有效期为60s。在此期间,您可以通过SSH公钥连接实例,无需输入密码,避免密码泄露等风险。

  • 适用场景

    • 需要频繁连接多个实例。

    • 需要远程操作较为敏感的实例。

前提条件

操作步骤

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

    ssh-keygen -t rsa

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

    说明

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

  2. 安装并启用config_ecs_instance_connect。

    控制台方式

    使用云助手发送如下命令到目标实例,安装并启用config_ecs_instance_connect。

    具体操作,请参见创建并执行命令

    acs-plugin-manager -e -P config_ecs_instance_connect --params --install

    CLI方式

    说明

    以下示例中的i-bp15vhvt43ciprqkxxxx请替换成实际的实例ID。

    aliyun ecs RunCommand --RegionId 'cn-hangzhou' \
     --Type 'RunShellScript' \
     --CommandContent 'acs-plugin-manager -e -P config_ecs_instance_connect --params --install' \
     --InstanceId.1 'i-bp15vhvt43ciprqkxxxx'    
  3. 发送SSH公钥到目标实例

    OpenAPI方式

    调用InvokeCommand,执行名称为ACS-ECS-SendSshPublicKey-linux.sh的公共命令,将SSH公钥发送到目标实例。

    您需要注意以下三个参数:

    • CommandId:命令ID,取值为ACS-ECS-SendSshPublicKey-linux.sh

    • Parameters:

      • username:远程登录目标实例的用户名,默认为root。

      • sshpublickey:远程登录目标实例使用的SSH公钥,必填参数,参数的值为步骤1中生成的id_rsa.pub的内容。

    控制台方式

    1. 登录ECS管理控制台

    2. 在左侧导航栏,选择运维与监控 > 云助手

    3. 单击公共命令页签。

    4. 在搜索框中输入ACS-ECS-SendSshPublicKey-linux.sh,单击Enter键。

    5. 在ACS-ECS-SendSshPublicKey-linux.sh公共命令对应的操作列,单击执行

    6. 在弹出的执行命令面板,配置参数。

      • 命令参数:

        • username:远程登录目标实例的用户名,默认为root。

        • sshpublickey:远程登录目标实例使用的SSH公钥,必填参数,参数的值为步骤1中生成的id_rsa.pub的内容。

      • 选择实例:选中要连接的目标实例。

        执行命令

    7. 单击执行

    CLI方式

    执行名称为ACS-ECS-SendSshPublicKey-linux.sh的公共命令,将公钥发送到目标实例。

    您需要注意以下三个参数:

    • CommandId:命令ID,取值为ACS-ECS-SendSshPublicKey-linux.sh

    • Parameters:

      • username:远程登录目标实例的用户名,默认为root,请替换成实际的用户名。

      • sshpublickey:远程登录目标实例使用的SSH公钥,必填参数,参数的值为步骤1中生成的id_rsa.pub的内容。

    CLI示例如下:

    aliyun ecs InvokeCommand --RegionId 'cn-hangzhou' \
     --CommandId 'ACS-ECS-SendSshPublicKey-linux.sh' \
     --InstanceId.1 'i-bp15vhvt43ciprqkxxxx' \
     --Parameters '{"username":"ecs-user","sshpublickey":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5A0cE4tq7oq6q0NyEp/EuVNY9AGVVC1Kkp9MM2O0P+hXjghPVLk2j8rNue6IPwAcLPKwgwOMbcNKGu6U90Kt8XPE5fOyp1dakqXiG1hZFrNjfqkR7xpceV/N4tQvb5/8DCq98u85qouj/KGIvZ6+BIQKBBh96iy/iHNLVNIS0H7UmBhYM4q9jjnxa+qy1JRCvV5Cc5mRgr87LfXbx+zmNiibFF23R9B9zeY1cS7RKRvzkpUWAN46f0gwY6Lg++wtg6DPWOKQ98P9is5rFpbYLv0xkV9h9vHH95RNNxOf0/RDcD7LbF0Kjz9oHp807pNinO94fvhWe5qZDH4VT**** test@iZnl7ckqcca****"}' 

  4. 免密登录目标实例。

    支持以下两种方式登录目标实例。

    说明

    以下命令中~/.ssh/id_rsa请替换成您的实际私钥路径,username请替换成您远程登录目标实例的用户名,instance_ip请替换成您远程登录的目标实例IP。

    • 通过公网IP免密登录目标实例。

      ssh -i ~/.ssh/id_rsa username@instance_ip 
    • 通过instance_id免密登录目标实例。

      ssh -i ~/.ssh/id_rsa username@instance_id 

常见问题

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

公钥注册完成之后,有效期为60s,请确认您的公钥是否已经过期。

通过云助手安装config_ecs_instance_connect,或者通过公共命令报错时候,如何查看具体问题?

您可以通过查看日志分析具体问题。

  • 云助手Agent日志路径:

    /usr/local/share/aliyun-assist/云助手版本号/log/aliyun_assist_main.log.*
  • 云助手插件模块日志路径:

    /usr/local/share/aliyun-assist/云助手版本号/log/acs_plugin_manager.log

相关文档