Tous les produits
Search
Centre de documentation

CloudOps Orchestration Service:Utiliser OOS pour configurer la connexion sans mot de passe pour plusieurs instances ECS

Dernière mise à jour :Aug 11, 2026

CloudOps Orchestration Service (OOS) est un service d’exploitation et de maintenance automatisé proposé par Alibaba Cloud. Créez des modèles pour définir les tâches, leur séquence d’exécution, ainsi que les paramètres d’entrée et de sortie, puis exécutez automatiquement les opérations de maintenance.

La connexion SSH sans mot de passe est couramment utilisée dans le cadre de l’exploitation et de la maintenance automatisées pour gérer un grand nombre de serveurs de manière sécurisée et efficace. Si vous disposez de plusieurs instances Elastic Compute Service (ECS), utilisez OOS pour configurer la connexion sans mot de passe pour certaines ou toutes ces instances en une seule opération.

Important
  1. Vérifiez la disponibilité des instances ECS. Si aucune instance n’est disponible, achetez-en. Pour plus d’informations, consultez Prise en main.

  2. L’utilisateur utilisé pour se connecter aux instances ECS doit être identique pour toutes les instances concernées par la configuration sans mot de passe.

  3. Seules les instances ECS sous Linux sont prises en charge.

Procédure

  1. Connectez-vous à la console OOS.

  2. Ajoutez un utilisateur permettant la connexion sans mot de passe aux instances ECS. Si cet utilisateur existe déjà, ignorez cette étape. Sinon, exécutez un script pour ajouter l’utilisateur aux instances ECS depuis la page Batch Instance Operations de la console OSS. L’image suivante illustre la procédure.image

  3. Créez un modèle.

Ce modèle configure la connexion sans mot de passe pour les instances ECS. Pour consulter son contenu, reportez-vous à la section Annexe 1 : Modèle pour la connexion sans mot de passe.

Copiez le script, collez-le dans la zone de saisie, puis cliquez sur Create Template. Le modèle récupère les clés publiques des instances ECS spécifiées et configure la connexion sans mot de passe pour l’utilisateur désigné.freelogin-02

  1. Exécutez le modèle.

Sur la page Custom Template, repérez le modèle et cliquez sur Create Execution dans la colonne Actions. Configurez les informations de base, puis cliquez sur Next Step: Parameter Settings.freelogin-03

  1. Configurez les paramètres à l’étape Parameter Settings. Sélectionnez manuellement les instances ECS ou spécifiez des tags pour les cibler. L’image suivante illustre la procédure.freelogin-05

  2. Cliquez sur Next Step: OK. Confirmez les paramètres, puis cliquez sur Create. L’exécution du modèle démarre.freelogin-06

  3. Une fois l’exécution terminée, vérifiez que la configuration sans mot de passe est effective.

Pour vérifier le bon fonctionnement de la connexion sans mot de passe, connectez-vous à une instance ECS configurée et exécutez la commande ssh en tant qu’utilisateur désigné pour accéder à une autre instance. Dans l’exemple suivant, la commande su permet de basculer vers l’utilisateur freelogin, qui se connecte ensuite à une autre instance ECS sans saisir de mot de passe.freelogin-07

Annexe 1 : Modèle pour la connexion sans mot de passe

Le tableau suivant décrit les paramètres du modèle.

Paramètre

Description

regionId

ID de la région du cluster.

sourceTarget

Instance ECS dont la clé publique est requise pour la connexion sans mot de passe.

destinationTarget

Instance ECS pour laquelle vous souhaitez configurer la connexion sans mot de passe.

userName

Nom de l’utilisateur utilisé pour se connecter aux instances ECS.

rateControl

Taux de concurrence des exécutions de tâches.

OOSAssumeRole

Rôle Resource Access Management (RAM) utilisé par OOS.

Script du modèle :

FormatVersion: OOS-2019-06-01
Description:
  en: 'In the instance, a user is linked without encryption by means of an authorization key.'
   
Parameters:
  regionId:
    Type: String
    Description:
      en: The id of region.
       
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  sourceTarget:
    Type: Json
    Description:
      en: Example of obtaining the secret-free public key when configuring the secret-free login.
       
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: regionId
  destinationTarget:
    Type: Json
    Description:
      en: Need to open an instance of password-free login.
       
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: regionId
    Default:
      Type: ResourceIds
      ResourceIds: []
  userName:
    Description:
      en: Password-free login username in the instance.
       
    Type: String
  rateControl:
    Description:
      en: Concurrency ratio of task execution.
       
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 10
  OOSAssumeRole:
    Description:
      en: The RAM role to be assumed by OOS.
       
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: getSourceInstance
    Description:
      en: Get an instance that needs to be logged in without password.
       
    Action: 'ACS::SelectTargets'
    Properties:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ sourceTarget }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
  - Name: getDestinationInstance
    Description:
      en: Views the ECS instances than to ssh without password.
       
    Action: 'ACS::SelectTargets'
    Properties:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ destinationTarget }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
  - Name: generateOrGetPublicKey
    Action: 'ACS::ECS::RunCommand'
    Description:
      en: Generate or get a public key.
       
    Properties:
      regionId: '{{ regionId }}'
      commandContent: |-
        #!/bin/bash
        username="{{ username }}"

        if [ $username == root ]; then
            if [ ! -e "/root/.ssh/id_rsa.pub" ]; then
              ssh-keygen -f "/root/.ssh/id_rsa" -P "" >> /dev/null
            fi
            cat /root/.ssh/id_rsa.pub
        else
            if [ ! -e "/home/$username/.ssh/id_rsa.pub" ]; then
                su $username -l -c "ssh-keygen -f /home/$username/.ssh/id_rsa -P '' >> /dev/null"
            fi
            chmod 700 /home/$username/.ssh
            cat /home/$username/.ssh/id_rsa.pub
        fi
      instanceId: '{{ ACS::TaskLoopItem }}'
      commandType: RunShellScript
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ getSourceInstance.instanceIds }}'
      Outputs:
        publicKeys:
          AggregateType: 'Fn::ListJoin'
          AggregateField: publicKey
    Outputs:
      publicKey:
        Type: String
        ValueSelector: invocationOutput
  - Name: converPublicKeyToStr
    Action: 'ACS::ECS::SMCConversionConstantByJqScript'
    Description:
      en: Convert public key to string.
       
    Properties:
      parameter:
        'Fn::Jq':
          - First
          - 'join(",")'
          - '{{ generateOrGetPublicKey.publicKeys }}'
      jqScript:
        - '.[0] | .'
        - '.[0] | .'
    Outputs:
      publicKey:
        Type: String
        ValueSelector: 'firstValue | split(",") | join("\n")'
  - Name: authorizedInstances
    Action: 'ACS::ECS::RunCommand'
    Description:
      en: Enable password-free login for users in the instance.
       
    Properties:
      regionId: '{{ regionId }}'
      commandContent: |-
        #!/bin/bash
        username="{{ username }}"
        publicKey="{{ converPublicKeyToStr.publicKey }}"
        if [ $username == root ]; then
            if [ ! -e "/root/.ssh/id_rsa.pub" ]; then
                ssh-keygen -f "/root/.ssh/id_rsa" -P "" >> /dev/null
            fi
            cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
        else
            if [ ! -e "/home/$username/.ssh/id_rsa.pub" ]; then
                su $username -l -c "ssh-keygen -f /home/$username/.ssh/id_rsa -P '' >> /dev/null"
            fi
            chmod 700 /home/$username/.ssh
            cat /home/$username/.ssh/id_rsa.pub >> /home/$username/.ssh/authorized_keys
        fi
        if [ $username == root ]; then
        cat >> /root/.ssh/authorized_keys << eof
        $publicKey
        eof
        else
        cat >> /home/$username/.ssh/authorized_keys << eof
        $publicKey
        eof
        fi
      instanceId: '{{ ACS::TaskLoopItem }}'
      commandType: RunShellScript
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ getDestinationInstance.instanceIds }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
Outputs:
  commandOutputs:
    Type: List
    Value: '{{ generateOrGetPublicKey.publicKeys }}'