Interagir avec la console série

Cette page explique comment activer l'accès interactif à la console série d'une instance pour déboguer les problèmes de démarrage et de mise en réseau, résoudre les incidents, interagir avec le bootloader GRUB (GRand Unified Bootloader) et effectuer d'autres tâches de dépannage.

Une instance de machine virtuelle possède quatre ports série virtuels. Les interactions avec un port série sont semblables à l'utilisation d'une fenêtre de terminal, en ce sens que les entrées et les sorties sont entièrement en mode texte et qu'il n'existe pas d'interface graphique ni de support de souris. Le système d'exploitation de l'instance, le BIOS et d'autres entités de niveau système génèrent souvent des données en sortie sur les ports série, mais acceptent aussi les entrées comme les commandes ou les réponses à des invites. En règle générale, ces entités de niveau système utilisent le premier port série (port 1), que l'on désigne souvent par console série.

Si vous devez simplement afficher la sortie du port série sans émettre de commande sur la console série, vous pouvez appeler la méthode getSerialPortOutput ou recourir à Stackdriver Logging pour consulter les informations que votre instance a écrites sur son port série. Consultez la page Afficher les données en sortie du port série pour en savoir plus. Cependant, si vous ne parvenez pas à accéder à votre instance via SSH ou si une instance ne démarre pas complètement, vous pouvez activer un accès interactif à la console série pour vous connecter à tous les ports série de votre instance. Par exemple, vous pouvez exécuter directement des commandes et répondre aux invites du port série.

Lorsque vous activez ou désactivez le port série, vous pouvez utiliser n'importe quelle valeur booléenne acceptée par le serveur de métadonnées. Pour en savoir plus, consultez la section sur la définition de valeurs booléennes.

Avant de commencer

Autorisations requises pour cette tâche

Pour effectuer cette tâche, vous devez disposer des autorisations suivantes.

  • compute.instances.setMetadata sur l'instance si l'accès interactif est activé sur une instance spécifique
  • compute.projects.setCommonInstanceMetadata sur le projet si l'accès interactif est activé dans le projet

Activer l'accès interactif sur la console série

Vous pouvez activer l'accès interactif à la console série interactive pour des instances de VM individuelles ou pour l'ensemble d'un projet.

Activer l'accès pour un projet

L'activation de l'accès à la console série interactive sur un projet permet d'accéder à toutes les instances de VM disponibles dans ce projet.

Par défaut, l'accès au port série interactif est désactivé. Vous pouvez le désactiver explicitement en définissant la clé serial-port-enable sur FALSE. Dans les deux cas, si un paramètre est spécifié au niveau d'une instance, il remplace le paramètre au niveau du projet ou le paramètre par défaut.

Console

  1. Dans Google Cloud Console, accédez à la page Métadonnées.

    Accéder à la page "Métadonnées"

  2. Cliquez sur Modifier pour modifier les entrées de métadonnées.
  3. Ajoutez une entrée en spécifiant la clé serial-port-enable et la valeur TRUE.
  4. Enregistrez les modifications.

gcloud

À l'aide de l'outil de ligne de commande gcloud, saisissez la commande project-info add-metadata comme suit :

gcloud compute project-info add-metadata \
    --metadata serial-port-enable=TRUE

API

Dans l'API, envoyez une requête à la méthode projects().setCommonInstanceMetadata, en fournissant la clé serial-port-enable avec la valeur TRUE :

{
 "fingerprint": "FikclA7UBC0=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

Activer l'accès pour une instance de VM

Vous pouvez activer l'accès à la console série interactive pour une instance spécifique. Si un paramètre au niveau d'une instance est spécifié, il remplace le paramètre au niveau du projet. Vous pouvez également désactiver l'accès pour une instance spécifique, même si l'accès est activé au niveau du projet, en définissant serial-port-enable sur FALSE au lieu de TRUE. De même, vous pouvez activer l'accès pour une ou plusieurs instances même s'il est désactivé pour le projet, explicitement ou par défaut.

Console

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cliquez sur l'instance pour laquelle vous souhaitez activer l'accès.
  3. Cliquez sur Modifier.
  4. Sous la section Accès à distance, cochez la case Activer la connexion aux ports série.
  5. Enregistrez les modifications.

gcloud

À l'aide de l'outil de ligne de commande gcloud, saisissez la commande instances add-metadata en remplaçant instance-name par le nom de votre instance.

gcloud compute instances add-metadata instance-name \
    --metadata serial-port-enable=TRUE

API

Dans l'API, envoyez une requête à la méthode instances().setMetadata en fournissant la clé serial-port-enable avec la valeur TRUE :

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance/setMetadata
{
 "fingerprint": "zhma6O1w2l8=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

Se connecter à une console série

Après avoir activé l'accès interactif pour la console série d'une instance, vous pouvez y accéder à l'aide de Google Cloud Console, de l'outil de ligne de commande gcloud ou d'un client SSH tiers.

La console série authentifie les utilisateurs avec des clés SSH. Plus précisément, vous devez ajouter votre clé SSH publique aux métadonnées du projet ou de l'instance et stocker votre clé privée sur l'ordinateur local à partir duquel vous souhaitez vous connecter. L'outil gcloud et Google Cloud Console ajoutent automatiquement des clés SSH au projet. Si vous utilisez un client tiers, vous devrez peut-être ajouter les clés SSH manuellement.

Console

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cliquez sur l'instance à laquelle vous souhaitez vous connecter.
  3. Sous Accès à distance, cliquez sur Se connecter à la console série pour vous connecter au port par défaut (port 1).
  4. Si vous souhaitez vous connecter à un autre port série, cliquez sur la flèche vers le bas située à côté du bouton Se connecter à la console série et modifiez le numéro de port en conséquence.
  5. Pour les instances Windows, ouvrez le menu déroulant situé à côté du bouton et connectez-vous au port 2 pour accéder à la console série.

gcloud

Utilisez la sous-commande gcloud compute connect-to-serial-port pour vous connecter à l'aide de l'outil de ligne de commande gcloud. Remplacez instance-name par le nom de l'instance pour laquelle vous souhaitez accéder à la console série.

gcloud compute connect-to-serial-port instance-name

Par défaut, la commande connect-to-serial-port se connecte au port 1 de la console série. Si vous vous connectez à une instance de VM Windows, utilisez le port 2 :

gcloud compute connect-to-serial-port instance-name \
    --port 2

Pour utiliser un autre port, indiquez son numéro à l'aide de l'indicateur --port. Entrez un numéro de port compris entre 1 et 4. Pour en savoir plus sur les numéros de port, consultez la section Présentation de la numérotation des ports série.

Autres clients SSH

Vous pouvez vous connecter à la console série d'une instance en utilisant d'autres clients SSH tiers, à condition que la connexion au port TCP 9600 soit autorisée par le client.

Par exemple, la commande SSH suivante se connecte au port série par défaut (1) d'une instance nommée example-instance avec le nom d'utilisateur jane dans un projet dont l'ID est myproject. L'instance se trouve dans la zone us-central1-f. Remplacez private-ssh-key-file par le fichier de clé SSH privée de l'instance.

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane@ssh-serialport.googleapis.com
 

Plus précisément, vous vous connectez à la console série d'une instance en utilisant les informations de connexion et d'adresse suivantes :

project-id.zone.instance-name.username.options@ssh-serialport.googleapis.com

Remplacez l'élément suivant :

  • project-id : ID de projet pour cette instance.
  • zone : zone de l'instance.
  • instance-name : nom de l'instance.
  • username : nom d'utilisateur qui vous permet de vous connecter à l'instance. En règle générale, il s'agit du nom d'utilisateur sur votre ordinateur local.
  • options : options supplémentaires que vous pouvez spécifier pour cette connexion. Par exemple, vous pouvez spécifier un port série et une option avancée. Le numéro de port peut être compris entre 1 et 4. Pour en savoir plus sur les numéros de port, consultez la section Présentation de la numérotation des ports série. En cas d'omission, vous serez connecté au port série 1.

Si vous vous connectez à une instance de VM Windows, sélectionnez le port 2 en exécutant la commande suivante :

ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.port=2@ssh-serialport.googleapis.com

Si vous rencontrez des problèmes de connexion avec un client SSH tiers, vous pouvez exécuter gcloud compute connect-to-serial-port avec l'option de ligne de commande --dry-run pour afficher la commande SSH exécutée en votre nom, puis comparer les options avec celles de la commande que vous utilisez.

Configurer une connexion sécurisée

Lorsque vous utilisez un client SSH tiers autre que l'outil de ligne de commande gcloud, vous pouvez vous assurer que vous êtes protégé contre toute tentative d'usurpation d'identité ou d'attaque de l'intercepteur en vérifiant la clé SSH du serveur de port série de Google. Pour configurer votre système afin de vérifier la clé SSH du serveur, procédez comme suit :

  1. Téléchargez la clé SSH du serveur de port série de Google.
  2. Ouvrez votre fichier d'hôtes connus, généralement situé à l'adresse ~/.ssh/known_hosts.
  3. Enregistrez le contenu de la clé SSH du serveur, en ajoutant ssh-serialport.googleapis.com en préfixe à la clé. Par exemple, si la clé du serveur contient la ligne ssh-rsa AAAAB3NzaC1yc..., ~/.ssh/known_hosts doit comporter une ligne semblable à la suivante :

    ssh-serialport.googleapis.com ssh-rsa AAAAB3NzaC1yc...

Pour des raisons de sécurité, Google peut parfois modifier la clé SSH du serveur de port série Google. Si votre client ne parvient pas à authentifier la clé du serveur, annulez immédiatement la tentative de connexion et suivez les étapes précédentes pour télécharger une nouvelle clé SSH de serveur de port série Google.

Si vous continuez à recevoir une erreur d'authentification de l'hôte du client après la mise à jour de la clé hôte, arrêtez les tentatives de connexion au port série et contactez l'assistance Google. N'indiquez aucune information d'identification sur une connexion où l'authentification de l'hôte a échoué.

Se déconnecter de la console série

Pour vous déconnecter de la console série :

  1. Appuyez sur la touche ENTER.
  2. Saisissez ~. (tilde, suivi d'un point).

Vous pouvez découvrir d'autres commandes en saisissant ~? ou en consultant la page de manuel pour SSH :

man ssh

N'essayez pas de vous déconnecter au moyen de l'une des méthodes suivantes :

  • Combinaison de touches CTRL+ALT+DELETE ou autres combinaisons similaires. Cela ne fonctionne pas, car la console série ne reconnaît pas les combinaisons de clavier PC.

  • La commande exit ou logout ne fonctionne pas, car l'invité n'a connaissance d'aucune connexion réseau ou modem. L'utilisation de ces commandes provoque la fermeture, puis la réouverture de la console, sans fermeture de votre session. Si vous souhaitez activer les commandes exit et logout pour votre session, définissez l'option on-dtr-low.

Se connecter à une console série via une invite de connexion

Si vous tentez de résoudre un problème sur une instance entièrement démarrée ou survenu après un démarrage en mode mono-utilisateur, les informations de connexion vous seront probablement demandées au moment d'accéder à la console série.

Par défaut, les images système fournies par Google ne sont pas configurées pour autoriser les connexions par mot de passe aux utilisateurs locaux. Si votre instance exécute une image préconfigurée avec des connexions de port série, vous devez définir un mot de passe local sur l'instance de la machine virtuelle pour pouvoir vous connecter à la console série si vous y êtes invité.

Configurer un mot de passe local

Les instructions suivantes décrivent comment définir un mot de passe d'utilisateur local sur une instance de machine virtuelle afin que cet utilisateur puisse se connecter à la console série de cette instance à l'aide du mot de passe spécifié.

  1. Connectez-vous à l'instance. Remplacez instance-name par le nom de votre instance.

    gcloud compute ssh instance-name
  2. Dans l'instance, créez un mot de passe local à l'aide de la commande suivante. Un mot de passe est alors défini pour l'utilisateur au nom duquel vous êtes actuellement connecté.

    sudo passwd whoami
  3. Suivez les instructions pour créer un mot de passe.

  4. Ensuite, déconnectez-vous de l'instance et connectez-vous à la console série.

  5. Saisissez vos informations de connexion lorsque vous y êtes invité.

Configurer une connexion sur d'autres ports série

Les invites de connexion sont activées sur le port 1 par défaut sur la plupart des systèmes d'exploitation Linux. Toutefois, le port 1 est souvent surchargé en raison des données de journalisation et autres informations enregistrées sur le port. Pour contourner ce problème, il est possible d'activer une invite de connexion sur un autre port, tel que le port 2 (ttyS1), en exécutant l'une des commandes suivantes sur votre instance. Consultez la liste des ports disponibles pour une instance dans la section Présentation de la numérotation des ports série.

Le tableau suivant répertorie les images préconfigurées avec une connexion à la console série et les ports par défaut.

Système d'exploitation Ports avec une invite de connexion par défaut Gestion des services
CentOS 6 1 upstart
CentOS 7 1 systemd
CoreOS 1 systemd
COS 1 systemd
Debian 8 1 systemd
Debian 9 1 systemd
openSUSE 13 1 systemd
OpenSUSE Leap 1 systemd
RHEL 6 1 upstart
RHEL 7 1 systemd
SLES 11 1 sysvinit
SLES 12 1 systemd
Ubuntu 14.04 1 upstart
Ubuntu 16.04 1 systemd
Ubuntu 17.04 1 systemd
Ubuntu 17.10 1 systemd
Windows COM2 N/A

Pour activer les invites de connexion sur des ports série supplémentaires, procédez comme suit.

systemd

Pour les systèmes d'exploitation Linux utilisant systemd :

  • Activez temporairement le service jusqu'au prochain redémarrage :

    sudo systemctl start serial-getty@ttyS1.service
  • Activez le service en permanence, en commençant par le prochain redémarrage :

    sudo systemctl enable serial-getty@ttyS1.service

upstart

Pour les systèmes d'exploitation Linux utilisant upstart :

  1. Créez un fichier /etc/init/ttyS1.conf en copiant et en modifiant un fichier ttyS1 existant pour refléter ttyS0.conf. Exemple :

    • Sous Ubuntu 14.04 :

      sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
    • Sous RHEL 6.8 et CentOS 6.8

      sudo sh -c "sed -ne '/^# # ttyS0/,/^# exec/p'  < /etc/init/serial.conf  | sed -e 's/ttyS0/ttyS1/g' -e 's/^# *//' > /etc/init/ttyS1.conf"
  2. Commencez par une invite de connexion sur ttyS1 sans redémarrage :

    sudo start ttyS1

sysvinit

Pour les systèmes d'exploitation Linux utilisant sysvinit, exécutez la commande suivante :

 sudo sed -i~ -e &#39;s/^#T([01])/T\1/&#39; /etc/inittab
 sudo telinit q

Présentation de la numérotation des ports série

Chaque instance de machine virtuelle possède quatre ports série. Pour des raisons de cohérence avec l'API getSerialPortOutput, chaque port est numéroté de 1 à 4. Linux et d'autres systèmes semblables numérotent leurs ports série de 0 à 3. Par exemple, sur de nombreuses images de systèmes d'exploitation, les périphériques correspondants sont référencés de /dev/ttyS0 à /dev/ttyS3. Windows référence les ports série sous les désignations COM1 à COM4. Pour vous connecter à ce que Windows considère comme COM3 et que Linux considère comme ttyS2, vous devez spécifier le port 3. Le tableau ci-dessous vous aidera à déterminer le port auquel vous souhaitez vous connecter.

Ports série d'instance de machine virtuelle Ports série Linux standard Ports COM Windows
1 /dev/ttyS0 COM1
2 /dev/ttyS1 COM2
3 /dev/ttyS2 COM3
4 /dev/ttyS3 COM4

Notez que de nombreuses images Linux utilisent le port 1 (/dev/ttyS0) pour enregistrer les messages du noyau et des programmes système.

Envoyer une interruption série

La fonctionnalité Magic SysRq key vous permet d'effectuer des tâches de bas niveau, quel que soit l'état du système, comme synchroniser des systèmes de fichiers, redémarrer l'instance, supprimer des processus, désinstaller des systèmes de fichiers, etc.

Pour envoyer une commande Magic SysRq en utilisant une interruption série simulée :

  1. Appuyez sur la touche ENTER.
  2. Saisissez ~B (tilde, suivi de majuscule B).
  3. Saisissez la commande Magic SysRq.

Afficher les journaux d'audit de la console série

Compute Engine fournit des journaux d'audit pour savoir qui s'est connecté et déconnecté de la console série d'une instance. Pour afficher les journaux, vous devez disposer des autorisations d'accès à la visionneuse de journaux ou du rôle de lecteur ou d'éditeur de projet.

  1. Dans Google Cloud Console, accédez à la page Journaux.

    Accéder à la page Journaux

  2. Développez le menu déroulant et sélectionnez GCE VM Instance.
  3. Dans la barre de recherche, saisissez ssh-serialport.googleapis.com et appuyez sur Entrée.
  4. La liste des journaux d'audit s'affiche. Les journaux décrivent les connexions et les déconnexions d'une console série. Cliquez sur l'une des entrées pour plus de détails :

    Journaux d'audit de la console série.

Quel que soit le journal d'audit, il est possible de :

  1. Développer la propriété protoPayload.
  2. Rechercher methodName pour voir l'activité à laquelle ce journal s'applique (requête de connexion ou de déconnexion). Par exemple, si ce journal enregistre une déconnexion de la console série, le nom de la méthode sera "google.ssh-serialport.v1.disconnect". De même, un journal de connexion indiquera "google.ssh-serialport.v1.connect". Une entrée de journal d'audit est enregistrée au début et à la fin de chaque session sur la console série.

Les propriétés de journal d'audit varient selon les différents types de journaux. Par exemple, les journaux d'audit concernant les connexions sont dotés de propriétés spécifiques aux journaux de connexion, tandis que les journaux d'audit concernant les déconnexions possèdent leur propre ensemble de propriétés. Certaines propriétés de journal d'audit sont également partagées entre les deux types de journaux.

Ensemble des journaux de console série

Propriété Valeur
requestMetadata.callerIp Adresse IP et numéro de port d'origine de la connexion.
serviceName ssh-serialport.googleapis.com
resourceName Chaîne contenant l'ID du projet, la zone, le nom de l'instance et le numéro de port série pour indiquer la console série correspondante. Par exemple, projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2 correspond au numéro de port 2, également appelé COM2 ou /dev/ttyS1, pour l'instance example-instance.
resource.labels Propriétés d'identification pour l'ID d'instance, la zone et l'ID de projet.
timestamp Horodatage indiquant le début ou la fin de la session.
severity NOTICE
operation.id Chaîne d'identification unique de la session, qui permet d'associer une entrée de déconnexion à l'entrée de connexion correspondante.
operation.producer ssh-serialport.googleapis.com

Journaux de connexion

Propriété Valeur
methodName google.ssh-serialport.v1.connect
status.message Connection succeeded.
request.serialConsoleOptions Toutes les options spécifiées avec la requête, y compris le numéro de port série.
request.@type type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username Nom d'utilisateur spécifié pour cette requête, utilisé pour sélectionner la clé publique à associer.
operation.first TRUE
status.code Pour toute demande de connexion réussie, une valeur status.code de google.rpc.Code.OK indique que l'opération s'est terminée sans erreur. Comme la valeur d'énumération de cette propriété est 0, la propriété status.code n'est pas affichée. Cependant, tout code vérifiant une valeur status.code de google.rpc.Code.OK fonctionnera comme prévu.

Journaux de déconnexion

Propriété Valeur
methodName google.ssh-serialport.v1.disconnect
response.duration Durée de la session en secondes.
response.@type type.googleapis.com/google.compute.SerialConsoleSessionEnd
operation.last TRUE

Journaux des échecs de connexion

Lorsqu'une connexion échoue, Compute Engine crée une entrée de journal d'audit. Un journal d'échec de connexion est semblable à une entrée de connexion réussie, mais possède les propriétés suivantes pour indiquer un échec de connexion.

Propriété Valeur
severity ERROR
status.code

Le code d'erreur canonique de l'API Google qui correspond le mieux à l'erreur. Les codes d'erreur suivants peuvent apparaître :

  • google.rpc.Code.INVALID_ARGUMENT : la connexion a échoué, car le client a fourni un numéro de port non valide ou a tenté d'atteindre un canal inconnu. Consultez la liste des numéros de port valides.
  • google.rpc.Code.PERMISSION_DENIED : vous n'avez pas activé la console série interactive sur le serveur de métadonnées. Pour en savoir plus, consultez la section Activer l'accès interactif sur la console série.
  • google.rpcCode.UNAUTHENTICATED : aucune clé SSH n'a été trouvée ou aucune clé SSH correspondante n'a été trouvée pour cette instance. Vérifiez que vous êtes authentifié sur l'instance de VM.
  • google.rpc.Code.UNKNOWN : une erreur inconnue s'est produite lors de votre requête. Vous pouvez contacter Google à l'aide du groupe de discussion gce ou remplir un rapport de bug.
status.message Message dans un format lisible pour cette entrée.

Désactiver l'accès interactif à la console série

Pour désactiver l'accès interactif à la console série, vous pouvez modifier les métadonnées sur l'instance ou le projet spécifique ou définir une règle d'administration qui désactive l'accès interactif à la console série pour toutes les instances de VM sur un ou plusieurs projets faisant partie de l'organisation.

Désactiver l'accès interactif à la console série sur une instance ou un projet particulier

Les propriétaires et les éditeurs du projet, ainsi que les utilisateurs ayant obtenu le rôle compute.instanceAdmin.v1, peuvent désactiver l'accès à la console série en modifiant les métadonnées de l'instance ou du projet en question. De la même manière que pour activer l'accès à la console série, définissez les métadonnées serial-port-enable sur FALSE :

serial-port-enable=FALSE

Par exemple, à l'aide de l'outil de ligne de commande gcloud, vous pouvez appliquer ces métadonnées à une instance spécifique comme ceci :

gcloud compute instances add-metadata instance-name \
    --metadata=serial-port-enable=FALSE

Pour appliquer les métadonnées au projet :

gcloud compute project-info add-metadata \
    --metadata=serial-port-enable=FALSE

Désactiver l'accès interactif à la console série via une règle d'administration

Si le rôle orgpolicy.policyAdmin vous a été attribué dans l'organisation, vous pouvez définir une règle d'administration qui empêche l'accès interactif à la console série, que cet accès soit activé ou non sur le serveur de métadonnées. Une fois définie, la règle remplace effectivement la clé de métadonnées serial-port-enable et aucun utilisateur de l'organisation ou du projet ne peut activer l'accès à la console série interactive. Par défaut, cette contrainte est définie sur FALSE.

La contrainte permettant de désactiver l'accès interactif à la console série est la suivante :

compute.disableSerialPortAccess

Pour définir cette règle dans l'organisation, suivez les instructions ci-dessous. Après avoir configuré une règle, vous pouvez accorder des exceptions par projet.

gcloud

Pour définir la règle à l'aide de l'outil de ligne de commande gcloud, exécutez la commande resource-manager enable-enforce. Remplacez organization-id par votre ID d'organisation. Par exemple, 1759840282.

gcloud alpha resource-manager org-policies enable-enforce \
    --organization organization-id compute.disableSerialPortAccess

API

Pour définir une règle dans l'API, envoyez une requête POST à l'URL suivante : Remplacez organization-name par le nom de votre organisation. Par exemple, organizations/1759840282.

 POST https://cloudresourcemanager.googleapis.com/v1beta1/organization-name:setOrgPolicy

Le corps de la requête doit contenir un objet policy avec la contrainte suivante :

"constraint": "constraints/compute.disableSerialPortAccess"

Exemple :

 {
   "policy":
   {
     "booleanPolicy":
     {
       "enforced": TRUE
     },
     "constraint": "constraints/compute.disableSerialPortAccess"
   }
 }
 

La règle étant effective immédiatement, les autorisations d'accès interactif à la console série sont instantanément interrompues pour tous les projets de l'organisation.

Pour désactiver temporairement la règle, utilisez la commande disable-enforce :

gcloud alpha resource-manager org-policies disable-enforce \
    --organization organization-id compute.disableSerialPortAccess

Vous pouvez également effectuer une requête d'API dans laquelle le corps de la requête définit le paramètre enforced sur FALSE :

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

Définir la règle d'administration au niveau du projet

Vous pouvez définir la même règle d'administration pour chaque projet, ce qui a pour effet d'ignorer le paramètre défini au niveau de l'organisation.

gcloud

Pour désactiver l'application de cette règle dans le cadre d'un projet spécifique, procédez comme suit. Remplacez project-id par votre ID de projet :

gcloud alpha resource-manager org-policies disable-enforce \
    --project project-id compute.disableSerialPortAccess

Vous pouvez activer l'application de cette règle en utilisant la commande enable-enforce avec les mêmes valeurs.

API

Dans l'API, envoyez une requête POST à l'URL suivante pour activer l'accès interactif à la console série pour le projet, en remplaçant project-id par l'ID du projet :

POST https://cloudresourcemanager.googleapis.com/v1beta1/projects/project-id:setOrgPolicy

Le corps de la requête doit contenir un objet policy avec la contrainte suivante :

"constraint": "constraints/compute.disableSerialPortAccess"

Exemple :

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

Conseils et astuces

  • Si vous rencontrez des problèmes de connexion avec un client SSH tiers mais que gcloud compute connect-to-serial-port se connecte correctement, vous pouvez exécuter avec l'option de ligne de commande --dry-run pour afficher la commande SSH exécutée en votre nom et comparer les options avec celles de la commande que vous utilisez.

  • Pour définir le débit binaire, également appelé débit en bauds, vous pouvez choisir la valeur de votre choix, telle que stty 9600. Toutefois, la fonctionnalité force normalement le taux effectif à 115 200 bps (environ 11,5 Ko/s). En effet, de nombreuses images d'OS ralentissent le débit, par exemple 9 600 bits sur la console série, et démarrent lentement.

  • Certaines images d'OS présentent des valeurs par défaut inadaptées sur le port série. Par exemple, sur CentOS 7, la valeur stty icrnl par défaut pour la touche Entrée de la console correspond à l'envoi d'un CR, alias ^M. L'interface système bash peut masquer ce problème jusqu'à ce que vous définissiez un mot de passe. Vous vous demandez alors pourquoi il semble bloqué à l'invite password:.

  • Certaines images d'OS ont des clés de contrôle de tâches désactivées par défaut si une interface système est reliée à un port selon certains paramètres, voici quelques exemples de ces clés : ^Z et ^C. La commande setsid peut résoudre ce problème. Dans tous les cas, si le message job control is disabled in this shell s'affiche, veillez à ne pas exécuter les commandes car vous devrez alors les interrompre.

  • Il peut être utile d'indiquer au système la taille de la fenêtre que vous utilisez, afin que le bash et les éditeurs puissent la gérer correctement. Sinon, vous pourriez rencontrer un comportement d'affichage anormal, car le bash ou les éditeurs tentent de traiter l'affichage à partir d'hypothèses erronées quant au nombre de lignes et de colonnes disponibles. Utilisez les commandes stty rows Y cols X et stty -a pour afficher le paramètre. Par exemple : stty rows 60 cols 120 (si votre fenêtre comporte 120 caractères sur 60 lignes).

  • Si vous vous connectez en SSH d'une machine A à une machine B, puis à une machine C (et ainsi de suite), créant ainsi une session SSH imbriquée, et que vous voulez utiliser des commandes tilde (~) pour vous déconnecter ou envoyer un signal d'interruption série, vous devez ajouter à la commande autant de caractères "~" que nécessaire pour accéder au bon client SSH. Une commande qui suit un seul caractère "~" sera interprétée par le client SSH sur la machine A, deux caractères "~" consécutifs seront interprétés par le client sur la machine B, et ainsi de suite. Il suffit d'appuyer une seule fois sur Entrée, car l'action est transmise jusqu'à la destination SSH la plus profonde. Cela est valable pour toutes les utilisations de clients SSH qui fournissent la fonctionnalité d'échappement "~".

    Si vous ne savez plus le nombre de caractères "~" dont vous avez besoin, appuyez sur la touche Entrée, puis saisissez les caractères "~" un par un jusqu'à recevoir un écho "~" de l'instance. Vous saurez ainsi que vous avez atteint la fin de la chaîne et que, pour envoyer une commande "~" au client SSH le plus imbriqué, vous devez saisir un caractère "~" de moins que votre saisie initiale.

Options avancées

Contrôler le nombre maximal de connexions

Vous pouvez définir la propriété max-connections pour contrôler le nombre de connexions simultanées pouvant être effectuées sur ce port série en même temps. Le nombre maximal de connexions par défaut est de 5. Exemple :

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args max-connections=3
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.max-connections=3@ssh-serialport.googleapis.com

Définir les options de répétition

Par défaut, chaque fois que vous vous connectez à la console série, les 10 dernières lignes de données sont répétées, que celles-ci aient été lues ou non par un autre client SSH. Les options suivantes permettent de modifier ce paramètre et de contrôler le nombre et la sélection des lignes renvoyées :

  • replay-lines=N : définissez N sur le nombre de lignes que vous souhaitez rejouer. Par exemple, si N est défini sur 50, les 50 dernières lignes des résultats de la console seront répétées.
  • replay-bytes=N : relance les octets N les plus récents. Vous pouvez également définir N sur new, ce qui rejoue toutes les sorties qui n'ont encore été envoyées à aucun client.
  • replay-from=N : relance la sortie à partir d'un index d'octets absolu que vous fournissez. Pour obtenir la valeur indexée actuelle des résultats de la console série, envoyez une requête getSerialPortOutput. Si vous définissez replay-from, toutes les autres options de relecture sont ignorées.

Avec l'outil de ligne de commande gcloud, ajoutez la commande suivante à votre commande connect-to-serial-port, où N correspond au nombre de lignes spécifié (ou octets ou index absolus, selon l'option de relecture sélectionnée) :

--extra-args replay-lines=N

Si vous utilisez un client SSH tiers, indiquez cette option dans votre commande SSH :

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com

Vous pouvez également combiner ces options. Exemple :

replay-lines=N et replay-bytes=new
Répétez le nombre de lignes spécifié OU répétez tous les résultats qui n'ont pas encore été envoyés à un client, selon la valeur la plus élevée. Avec cette combinaison d'indicateurs, le premier client à se connecter verra tous les résultats envoyés au port série, et les clients qui se connecteront par la suite ne verront que les N dernières lignes. Exemples :
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=new
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=new@ssh-serialport.googleapis.com
replay-lines=N et replay-bytes=M
Répétez les lignes jusqu'à, au plus, le nombre de lignes ou d'octets défini par ces indicateurs, selon le moins élevé des deux. Avec cette option, la répétition sera limitée à N ou M octets.
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=M
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=M@ssh-serialport.googleapis.com

Traiter des résultats ignorés

Les derniers 1 Mio de résultats pour chaque port série sont toujours disponibles et, de manière générale, votre client SSH ne doit omettre aucune sortie du port série. Si, pour une raison ou une autre, votre client SSH cesse d'accepter des résultats pendant un certain temps tout en restant connecté, et que de nouvelles données au-delà de 1 Mio sont générées, certains résultats ont probablement été ignorés par le client SSH. Lorsque votre client SSH n'accepte pas les données assez rapidement pour suivre la sortie sur le port série, définissez la propriété on-dropped-output pour déterminer le comportement de la console.

Définissez l'une des options applicables suivantes avec cette propriété :

  • insert-stderr-note : insère une note dans le fichier stderr du client SSH, indiquant que la sortie a été supprimée. Il s'agit de l'option par défaut.
  • ignore : supprime silencieusement la sortie et ne fait rien.
  • disconnect : interrompt la connexion.

Exemple :

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args on-dropped-output=ignore
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.on-dropped-output=ignore@ssh-serialport.googleapis.com

Activer la déconnexion à l'aide des commandes "exit" ou "logout"

Vous pouvez activer la déconnexion sur les commandes de sortie ou de déconnexion en définissant la propriété on-dtr-low sur disconnect lorsque vous vous connectez à la console série.

Dans l'outil de ligne de commande gcloud, ajoutez les éléments suivants à votre commande connect-to-serial-port :

--extra-args on-dtr-low=disconnect

Si vous utilisez un client SSH tiers, indiquez cette option dans votre commande SSH :

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.on-dtr-low=disconnect@ssh-serialport.googleapis.com

L'activation de l'option disconnect peut entraîner une ou plusieurs déconnexions de votre instance lors de son redémarrage, car le système d'exploitation réinitialise les ports série au démarrage.

Le paramètre par défaut pour cette option est none, où rien ne se produit lorsque la ligne DTR change. Si vous revenez au paramètre none, vous pouvez redémarrer votre instance sans être déconnecté de la console série. Cependant, la console ne se déconnectera pas par les moyens habituels tels que les commandes exit ou logout, ou les combinaisons de touches courantes comme Ctrl+D.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine