Automation in the context of multifactor authentication/fr: Difference between revisions

From Alliance Doc
Jump to navigation Jump to search
(Created page with "= Mesures de sécurité accrues = == Accès sur demande seulement == Pour avoir accès aux nœuds spéciaux, écrivez au soutien technique. Décrivez le type d'automatisation, listez les commandes qui seront exécutées ainsi que les outils ou les bibliothèques pour gérer l'automatisation.")
No edit summary
 
(91 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages />
<languages />


Les flux de travail qui établissent sans intervention humaine des connexions à nos grappes ne peuvent pas utiliser un deuxième facteur. Avec l'authentification multifacteur obligatoire, vous devez demander l'accès à un des nœuds spéciaux qui sont réservés pour les flux automatisés. Un deuxième facteur ne sera pas requis, mais les fonctionnalités de ces nœuds sont limitées par rapport à celles des nœuds de connexion ordinaires en termes de type d'authentification requise et aussi des types d'actions à exécuter.
Les flux de travail qui établissent sans intervention humaine des connexions à nos grappes ne peuvent pas utiliser un deuxième facteur. Avec l'authentification multifacteur maintenant obligatoire, vous devez demander l'accès à un des nœuds spéciaux qui sont réservés pour les flux automatisés. Un deuxième facteur ne sera alors pas requis, mais sachez que les fonctionnalités de ces nœuds sont limitées par rapport à celles des nœuds de connexion réguliers en termes de type d'authentification requise et aussi des types d'actions à exécuter.


= Mesures de sécurité accrues =
= Mesures de sécurité accrues =
== Accès sur demande seulement ==
== Accès sur demande seulement ==
Pour avoir accès aux nœuds spéciaux, écrivez au [[Technical support-fr|soutien technique]]. Décrivez le type d'automatisation, listez les commandes qui seront exécutées ainsi que les outils ou les bibliothèques pour gérer l'automatisation.
Pour avoir accès aux nœuds spéciaux d'automatisation, écrivez au [[Technical support/fr|soutien technique]]. Décrivez le type d'automatisation, listez les commandes qui seront exécutées ainsi que les outils ou les bibliothèques pour gérer l'automatisation.


<div lang="en" dir="ltr" class="mw-content-ltr">
== Accès via certaines clés SSH avec contraintes ==
== Available only through restricted SSH keys ==
L'accès aux nœuds d'automatisation se fait uniquement via les [[SSH_Keys#Using_CCDB|clés SSH téléversées dans CCDB]]. Les clés inscrites dans un fichier <i>.ssh/authorized_keys</i> ne sont pas acceptées. De plus, les clés SSH <b>doivent respecter</b> les contraintes suivantes.   
The only accepted means of authentication for the automation nodes will be through [[SSH_Keys#Using_CCDB|SSH keys uploaded to the CCDB]]. SSH keys written in your <i>.ssh/authorized_keys</i> file are not accepted. In addition, the SSH keys <b>must</b> obey the following constraints.
</div>  


=== <code>restrict</code> ===
=== <code>restrict</code> ===
This constraint disables port forwarding, agent forwarding, and X11 forwarding. It also disables the pseudo teletype (PTY), blocking most interactive workloads. This is required because these automation nodes are not intended to be used to start long-running or interactive processes. Regular login nodes must be used instead.  
Cette contrainte désactive la redirection de port (<i>port forwarding</i>), la redirection d'agent (<i>agent forwarding</i>) et la redirection X11. Le pseudotélétype (PTY) est aussi désactivé, puisqu'il bloquerait la plupart des flux interactifs. Nous posons ces conditions parce que les nœuds spéciaux ne doivent pas être utilisés pour les processus interactifs ou de longue durée; dans ces cas, il faut utiliser les nœuds réguliers.  


=== <code>from="pattern-list"</code> ===
=== <code>from="pattern-list"</code> ===
This constraint specifies that the key can only be used from IP addresses that match the patterns. This is to ensure that this key is not used from computers other than the ones intended. The patterns list must include only IP addresses that fully specify at least the network class, the network, and the subnet, which are the first 3 sections of an IP address. For example, <code>192.168.*.*</code> would not be accepted, but <code>192.168.1.*</code> would be accepted.  
Cette contrainte fait en sorte que la clé ne peut être utilisée qu'à partir d'adresses IP qui respectent le <i>pattern</i> et non par d'autres ordinateurs. La liste des <i>patterns</i> doit être uniquement composée d'adresses IP qui spécifient la classe du réseau, le réseau et le sous-réseau, soit les trois premiers éléments de l'adresse. Par exemple, <code>x.y.*.*</code> ne serait pas acceptée, mais <code>x.y.z.*</code> le serait. Aussi, l'adresse IP doit être une adresse <b>publique</b>; ainsi, <code>10.0.0.0 – 10.255.255.255</code>, <code>172.16.0.0 – 172.31.255.255</code> et <code>192.168.0.0 – 192.168.255.255</code> seraient incorrectes. Pour connaître votre adresse IP publique, allez sur le site [https://whatismyipaddress.com/ What Is My IP Address?] ou lancez la commande <code>curl ifconfig.me</code> de l'interpréteur (<i>shell</i>).


<div lang="en" dir="ltr" class="mw-content-ltr">
=== <code>command="COMMAND"</code> ===
=== <code>command="COMMAND"</code> ===
This constraint forces the command <code>COMMAND</code> to be executed when the connection is established. This is so that you may restrict which commands can be used with this key.
Cette contrainte exécute la commande <code>COMMAND</code> lors de la connexion. Ceci vous permet de définir les seules commandes qui peuvent être utilisées avec la clé.  
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Scripts enveloppants pour la commande <code>command=</code> ==
== Convenience wrapper scripts to use for <code>command=</code> ==
Cette commande permet de définir toutes les commandes, mais elle est le plus utile quand vous avez un script enveloppant qui accepte ou refuse les commandes qui sont appelées. Vous pouvez écrire vos propres scripts, mais nous en avons préparé certains pour des cas qui se présentent fréquemment. Ces scripts se trouvent dans [https://github.com/ComputeCanada/software-stack-custom/tree/main/bin/computecanada/allowed_commands ce dépôt git].
<code>command</code> constraints can specify any command, but they are most useful when using a wrapper script which will accept or reject commands based on which command is being called. You can write your own script, but for convenience, we provide a number of such scripts which will allow common actions. These scripts are defined in [https://github.com/ComputeCanada/software-stack-custom/tree/main/bin/computecanada/allowed_commands this git repository].
</div>


* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/transfer_commands.sh</code> permet uniquement les commandes de transfert de fichiers, comme <code>scp</code>, <code>sftp</code> ou <code>rsync</code>.
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/transfer_commands.sh</code> permet uniquement les commandes de transfert de fichiers, comme <code>scp</code>, <code>sftp</code> ou <code>rsync</code>
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/archiving_commands.sh</code> permet les commmandes d'archivage de fichiers, comme <code>gzip</code>, <code>tar</code> ou <code>dar</code>.
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/archiving_commands.sh</code> permet les commandes d'archivage de fichiers, comme <code>gzip</code>, <code>tar</code> ou <code>dar</code>
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/file_commands.sh</code> permet la commande de manipulation de fichiers, comme <code>mv</code>, <code>cp</code> ou <code>rm</code>.
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/file_commands.sh</code> permet la commande de manipulation de fichiers, comme <code>mv</code>, <code>cp</code> ou <code>rm</code>
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/git_commands.sh</code> permet la commande <code>git</code>.
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/git_commands.sh</code> permet la commande <code>git</code>
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/slurm_commands.sh</code> permet certaines commandes Slurm, comme <code>squeue</code>, <code>sbatch</code>.
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/slurm_commands.sh</code> permet certaines commandes Slurm, comme <code>squeue</code>, <code>sbatch</code>
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/allowed_commands.sh</code> permet toutes les commandes ci-dessus.
* <code>/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/allowed_commands.sh</code> permet toutes les commandes ci-dessus


<div lang="en" dir="ltr" class="mw-content-ltr">
== Exemples de clés SSH acceptées ==
== Examples of accepted SSH keys ==
Les clés doivent respecter les trois conditions décrites ci-dessus. En voici quelques exemples qui seraient valides pour le transfert de fichiers avec <code>scp</code>, <code>sftp</code> ou <code>rsync</code>&nbsp;:  
Accepted SSH keys must include all 3 of the above constraints to be accepted. Here are examples of SSH keys that would be accepted:
For example, the following key would be accepted, and could only be used for transferring files (through <code>scp</code>, <code>sftp</code> or <code>rsync</code> for example):  
<pre>
<pre>
restrict,from="216.18.209.*",command="/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/transfer_commands.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE6AACAIExK9iTTDGsyqKKzduA46DvIJ9oFKZ/WN5memqG9Invw
restrict,from="216.18.209.*",command="/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/transfer_commands.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE6AACAIExK9iTTDGsyqKKzduA46DvIJ9oFKZ/WN5memqG9Invw
</pre>
</pre>
while this one would only allow Slurm commands (squeue, scancel, sbatch, scontrol, sq):  
Le prochain exemple permettrait uniquement des commandes Slurm (squeue, scancel, sbatch, scontrol, sq).  
<pre>
<pre>
restrict,from="216.18.209.*",command="/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/slurm_commands.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE6AACAIExK9iTTDGsyqKKzduA46DvIJ9oFKZ/WN5memqG9Invw
restrict,from="216.18.209.*",command="/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/slurm_commands.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE6AACAIExK9iTTDGsyqKKzduA46DvIJ9oFKZ/WN5memqG9Invw
</pre>
</pre>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
{{Warning|title=Attention|content=
= Using the right key =
Avant d’ajouter la clé SSH dans [https://ccdb.alliancecan.ca/ssh_authorized_keys votre compte CCDB], assurez-vous que les contraintes soient indiquées comme dans les exemples précédents.
If you have multiple keys on your computer, you need to be careful to use the correct key. This is typically done by passing parameters to the command you are using. Below are a few examples.
}}
</div>
 
= Nœuds d'automatisation, par grappe =
Pour vous connecter à un nœud d'automatisation, utilisez les adresses suivantes&nbsp;:
* Cedar : robot.cedar.alliancecan.ca
* Graham : robot.graham.alliancecan.ca
* Béluga : robot.beluga.alliancecan.ca
* Narval : robot.narval.alliancecan.ca
* Niagara : robot.niagara.alliancecan.ca (vous pouvez aussi utiliser robot1.niagara.alliancecan.ca et robot2.niagara.alliancecan.ca)
 
= Ne pas se tromper de clé =
Si vous avez plusieurs clés, assurez-vous d'utiliser la bonne. Ceci peut se faire avec des paramètres passés à la commande, comme dans les exemples ci-dessous.


Avec <code>ssh</code> ou <code>scp</code>,
Avec <code>ssh</code> ou <code>scp</code>,
Line 59: Line 60:
Avec <code>rsync</code>,  
Avec <code>rsync</code>,  
{{Command|rsync -e "ssh -i .ssh/private_key_to_use" ...}}
{{Command|rsync -e "ssh -i .ssh/private_key_to_use" ...}}
Il est souvent beaucoup plus pratique d'inclure ces paramètres dans votre fichier ~/.ssh/config pour qu'ils soient pris en compte quand le client SSH est invoqué. Par exemple :
host robot
  hostname robot.cluster.alliancecan.ca
  user myrobot
  identityfile ~/.ssh/my-robot-key
  identitiesonly yes
  requesttty no
Ceci signifie que les deux types de commandes suivantes feront ce que vous voulez.
{{Command|ssh robot /usr/bin/ls}}
{{Command|rsync -a datadir/a robot:scratch/testdata}}
= Problème d'adressage avec IPv4 et IPv6 =
En voulant se connecter à un nœud d'automatisation, le client SSH de votre ordinateur pourrait choisir l'adressage IPv6 plutôt que l'adressage IPv4 moins récent.
Ceci semble plus probable dans un environnement Windows.
Si c'est le cas, assurez-vous que le masque de l'adresse IP que vous entrez dans le champ <code>restrict,from=</code> de la clé corresponde au type d'adresse que votre ordinateur utilisera pour se connecter au nœud.
Vérifiez vos adresses sur le site
https://test-ipv6.com/.
* Une adresse IPv4 ressemble à '''199.241.166.5'''.
* Une adresse IPv4 ressemble à '''2620:123:7002:4::5'''.
Si vous entrez le masque IPv4 ''199.241.166.*''' pour la clé SSH dans CCDB et que votre client SSH veut se connecter au nœud avec une adresse IPv6, il se pourrait que la clé ne soit pas acceptée parce que l'adresse source n'est pas comme le masque.
=== Comment identifier le problème ===
Si la connexion SSH à un nœud d'automatisation ne se fait pas, faites un test avec la commande
ssh -i ~/.ssh/automation_key -vvv username@robot.graham.alliancecan.ca "ls -l"
Ceci essaie d'établir la connexion avec le nœud d'automatisation sur Graham et d'exécuter la commande <code>ls -l</code> avec la clé SSH
<code>~/.ssh/automation_key</code>.
La liste des fichiers contenus dans votre répertoire /home sur Graham est ensuite affichée.
Cette commande produit beaucoup d'information de débogage à cause de l'option  <code>-vvv</code> (<i>Very Very Verbose</i>).
Si le message dans <i>Connecting to...</i> ressemble à
debug1: Connecting to robot.graham.alliancecan.ca [199.241.166.5] port 22.
l'adressage se fait avec IPv4.
Si le message ressemble plutôt à
debug1: Connecting to robot.graham.alliancecan.ca [2620:123:7002:4::5] port 22.
l'adressage se fait avec IPv6.
=== Solutions ===
* <b>Forcer le client SSH à utiliser IPv4 ou IPv6</b> avec les options <code>-4</code> et <code>-6</code> selon le format utilisé dans CCDB pour la clé.
* <b>Pointer au nœud d'automatisation avec l'adresse IP du nœud</b> plutôt qu'avec son nom; par exemple, sur Graham
: <code>ssh -i ~/.ssh/automation_key -vvv username@199.241.166.5 "ls -l"</code>
: pour forcer SSH à utiliser les adresses IPv4.
* <b>Désactiver l'adressage IPv6 sur votre ordinateur</b> pour faire en sorte que IP4v soit utilisé.
: Il ne devrait y avoir aucun impact négatif pour votre ordinateur, mais Microsoft ne le recommande pas et nous vous ne devriez l'utiliser qu'en dernier recours.
: La méthode de désactivation de l'adressage IPv6 dépend de l'ordinateur et du système d'exploitation.
= Automatisation avec Python et Paramiko =
Si votre flux de travail est automatisé avec le [https://www.paramiko.org/index.html module Paramiko de Python], voici comment le faire fonctionner avec un nœud d'automatisation&nbsp;:
<source lang=python>
# ====================================================================================================
#! /usr/bin/env python3
# ====================================================================================================
import os
import paramiko
# ====================================================================================================
key = paramiko.Ed25519Key.from_private_key_file("/home/username/.ssh/cc_allowed")
user = "username"
host = "robot.graham.alliancecan.ca"
ssh = paramiko.SSHClient()
# If the host is not known, it is OK.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, username=user, pkey=key)
cmd = "ls -l"
stdin, stdout, stderr = ssh.exec_command(cmd)
print("".join(stdout.readlines()))
ssh.close()
# ====================================================================================================
</source>
Ceci établit la connexion au nœud d'automatisation de '''Graham''' avec une clé inscrite dans le portail CCDB et exécute la commande <code>ls -l</code> pour obtenir la liste des fichiers.
La liste est ensuite affichée à l'écran.
Remarquez qu'il est important <b>d'installer Paramiko</b> avec la commande
$ pip install paramiko[all]
Ceci fait en sorte que le support pour le type de clés '''Ed25519''' est aussi installé.

Latest revision as of 18:57, 17 June 2024

Other languages:

Les flux de travail qui établissent sans intervention humaine des connexions à nos grappes ne peuvent pas utiliser un deuxième facteur. Avec l'authentification multifacteur maintenant obligatoire, vous devez demander l'accès à un des nœuds spéciaux qui sont réservés pour les flux automatisés. Un deuxième facteur ne sera alors pas requis, mais sachez que les fonctionnalités de ces nœuds sont limitées par rapport à celles des nœuds de connexion réguliers en termes de type d'authentification requise et aussi des types d'actions à exécuter.

Mesures de sécurité accrues

Accès sur demande seulement

Pour avoir accès aux nœuds spéciaux d'automatisation, écrivez au soutien technique. Décrivez le type d'automatisation, listez les commandes qui seront exécutées ainsi que les outils ou les bibliothèques pour gérer l'automatisation.

Accès via certaines clés SSH avec contraintes

L'accès aux nœuds d'automatisation se fait uniquement via les clés SSH téléversées dans CCDB. Les clés inscrites dans un fichier .ssh/authorized_keys ne sont pas acceptées. De plus, les clés SSH doivent respecter les contraintes suivantes.

restrict

Cette contrainte désactive la redirection de port (port forwarding), la redirection d'agent (agent forwarding) et la redirection X11. Le pseudotélétype (PTY) est aussi désactivé, puisqu'il bloquerait la plupart des flux interactifs. Nous posons ces conditions parce que les nœuds spéciaux ne doivent pas être utilisés pour les processus interactifs ou de longue durée; dans ces cas, il faut utiliser les nœuds réguliers.

from="pattern-list"

Cette contrainte fait en sorte que la clé ne peut être utilisée qu'à partir d'adresses IP qui respectent le pattern et non par d'autres ordinateurs. La liste des patterns doit être uniquement composée d'adresses IP qui spécifient la classe du réseau, le réseau et le sous-réseau, soit les trois premiers éléments de l'adresse. Par exemple, x.y.*.* ne serait pas acceptée, mais x.y.z.* le serait. Aussi, l'adresse IP doit être une adresse publique; ainsi, 10.0.0.0 – 10.255.255.255, 172.16.0.0 – 172.31.255.255 et 192.168.0.0 – 192.168.255.255 seraient incorrectes. Pour connaître votre adresse IP publique, allez sur le site What Is My IP Address? ou lancez la commande curl ifconfig.me de l'interpréteur (shell).

command="COMMAND"

Cette contrainte exécute la commande COMMAND lors de la connexion. Ceci vous permet de définir les seules commandes qui peuvent être utilisées avec la clé.

Scripts enveloppants pour la commande command=

Cette commande permet de définir toutes les commandes, mais elle est le plus utile quand vous avez un script enveloppant qui accepte ou refuse les commandes qui sont appelées. Vous pouvez écrire vos propres scripts, mais nous en avons préparé certains pour des cas qui se présentent fréquemment. Ces scripts se trouvent dans ce dépôt git.

  • /cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/transfer_commands.sh permet uniquement les commandes de transfert de fichiers, comme scp, sftp ou rsync
  • /cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/archiving_commands.sh permet les commandes d'archivage de fichiers, comme gzip, tar ou dar
  • /cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/file_commands.sh permet la commande de manipulation de fichiers, comme mv, cp ou rm
  • /cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/git_commands.sh permet la commande git
  • /cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/slurm_commands.sh permet certaines commandes Slurm, comme squeue, sbatch
  • /cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/allowed_commands.sh permet toutes les commandes ci-dessus

Exemples de clés SSH acceptées

Les clés doivent respecter les trois conditions décrites ci-dessus. En voici quelques exemples qui seraient valides pour le transfert de fichiers avec scp, sftp ou rsync :

restrict,from="216.18.209.*",command="/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/transfer_commands.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE6AACAIExK9iTTDGsyqKKzduA46DvIJ9oFKZ/WN5memqG9Invw

Le prochain exemple permettrait uniquement des commandes Slurm (squeue, scancel, sbatch, scontrol, sq).

restrict,from="216.18.209.*",command="/cvmfs/soft.computecanada.ca/custom/bin/computecanada/allowed_commands/slurm_commands.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE6AACAIExK9iTTDGsyqKKzduA46DvIJ9oFKZ/WN5memqG9Invw


Attention

Avant d’ajouter la clé SSH dans votre compte CCDB, assurez-vous que les contraintes soient indiquées comme dans les exemples précédents.



Nœuds d'automatisation, par grappe

Pour vous connecter à un nœud d'automatisation, utilisez les adresses suivantes :

  • Cedar : robot.cedar.alliancecan.ca
  • Graham : robot.graham.alliancecan.ca
  • Béluga : robot.beluga.alliancecan.ca
  • Narval : robot.narval.alliancecan.ca
  • Niagara : robot.niagara.alliancecan.ca (vous pouvez aussi utiliser robot1.niagara.alliancecan.ca et robot2.niagara.alliancecan.ca)

Ne pas se tromper de clé

Si vous avez plusieurs clés, assurez-vous d'utiliser la bonne. Ceci peut se faire avec des paramètres passés à la commande, comme dans les exemples ci-dessous.

Avec ssh ou scp,

Question.png
[name@server ~]$ ssh -i .ssh/private_key_to_use ...
Question.png
[name@server ~]$ scp -i .ssh/private_key_to_use ...

Avec rsync,

Question.png
[name@server ~]$ rsync -e "ssh -i .ssh/private_key_to_use" ...

Il est souvent beaucoup plus pratique d'inclure ces paramètres dans votre fichier ~/.ssh/config pour qu'ils soient pris en compte quand le client SSH est invoqué. Par exemple :

host robot
 hostname robot.cluster.alliancecan.ca
 user myrobot
 identityfile ~/.ssh/my-robot-key
 identitiesonly yes
 requesttty no

Ceci signifie que les deux types de commandes suivantes feront ce que vous voulez.

Question.png
[name@server ~]$ ssh robot /usr/bin/ls
Question.png
[name@server ~]$ rsync -a datadir/a robot:scratch/testdata

Problème d'adressage avec IPv4 et IPv6

En voulant se connecter à un nœud d'automatisation, le client SSH de votre ordinateur pourrait choisir l'adressage IPv6 plutôt que l'adressage IPv4 moins récent. Ceci semble plus probable dans un environnement Windows. Si c'est le cas, assurez-vous que le masque de l'adresse IP que vous entrez dans le champ restrict,from= de la clé corresponde au type d'adresse que votre ordinateur utilisera pour se connecter au nœud.

Vérifiez vos adresses sur le site https://test-ipv6.com/.

  • Une adresse IPv4 ressemble à 199.241.166.5.
  • Une adresse IPv4 ressemble à 2620:123:7002:4::5.

Si vous entrez le masque IPv4 199.241.166.*' pour la clé SSH dans CCDB et que votre client SSH veut se connecter au nœud avec une adresse IPv6, il se pourrait que la clé ne soit pas acceptée parce que l'adresse source n'est pas comme le masque.

Comment identifier le problème

Si la connexion SSH à un nœud d'automatisation ne se fait pas, faites un test avec la commande

ssh -i ~/.ssh/automation_key -vvv username@robot.graham.alliancecan.ca "ls -l" 

Ceci essaie d'établir la connexion avec le nœud d'automatisation sur Graham et d'exécuter la commande ls -l avec la clé SSH ~/.ssh/automation_key. La liste des fichiers contenus dans votre répertoire /home sur Graham est ensuite affichée.

Cette commande produit beaucoup d'information de débogage à cause de l'option -vvv (Very Very Verbose). Si le message dans Connecting to... ressemble à

debug1: Connecting to robot.graham.alliancecan.ca [199.241.166.5] port 22.

l'adressage se fait avec IPv4. Si le message ressemble plutôt à

debug1: Connecting to robot.graham.alliancecan.ca [2620:123:7002:4::5] port 22.

l'adressage se fait avec IPv6.

Solutions

  • Forcer le client SSH à utiliser IPv4 ou IPv6 avec les options -4 et -6 selon le format utilisé dans CCDB pour la clé.
  • Pointer au nœud d'automatisation avec l'adresse IP du nœud plutôt qu'avec son nom; par exemple, sur Graham
ssh -i ~/.ssh/automation_key -vvv username@199.241.166.5 "ls -l"
pour forcer SSH à utiliser les adresses IPv4.
  • Désactiver l'adressage IPv6 sur votre ordinateur pour faire en sorte que IP4v soit utilisé.
Il ne devrait y avoir aucun impact négatif pour votre ordinateur, mais Microsoft ne le recommande pas et nous vous ne devriez l'utiliser qu'en dernier recours.
La méthode de désactivation de l'adressage IPv6 dépend de l'ordinateur et du système d'exploitation.

Automatisation avec Python et Paramiko

Si votre flux de travail est automatisé avec le module Paramiko de Python, voici comment le faire fonctionner avec un nœud d'automatisation :

# ====================================================================================================
#! /usr/bin/env python3
# ====================================================================================================
import os
import paramiko
# ====================================================================================================

key = paramiko.Ed25519Key.from_private_key_file("/home/username/.ssh/cc_allowed")

user = "username"
host = "robot.graham.alliancecan.ca"

ssh = paramiko.SSHClient()

# If the host is not known, it is OK.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=host, username=user, pkey=key)

cmd = "ls -l"
stdin, stdout, stderr = ssh.exec_command(cmd)

print("".join(stdout.readlines()))

ssh.close()
# ====================================================================================================

Ceci établit la connexion au nœud d'automatisation de Graham avec une clé inscrite dans le portail CCDB et exécute la commande ls -l pour obtenir la liste des fichiers. La liste est ensuite affichée à l'écran.

Remarquez qu'il est important d'installer Paramiko avec la commande

$ pip install paramiko[all]

Ceci fait en sorte que le support pour le type de clés Ed25519 est aussi installé.