Recherche de site Web

Comment lier une clé publique SSH à une commande spécifique


Dans l’architecture client-serveur utilisée par le protocole SSH, un client peut s’authentifier en fournissant un mot de passe en clair tunnelisé ou en utilisant une paire de clés publique/privée : c’est ce qu’on appelle l’authentification par clé publique. Un utilisateur qui se connecte via une clé publique sur une machine distante a un accès complet à la ligne de commande ; Dans certaines situations, cependant, il peut être utile d’associer une clé publique à une seule commande spécifique, pour des raisons de sécurité.

Dans ce tutoriel, nous voyons comment copier une clé publique sur un serveur SSH, et comment la lier à une commande spécifique.

Dans ce tutoriel, vous allez apprendre :

  • Comment copier une clé publique sur un serveur SSH
  • Comment lier une clé publique SSH à une commande spécifique

Le fichier « authorized_keys »

L’authentification par clé publique est basée sur l’utilisation d’une paire de clés publique/privée pour accéder à une machine distante exécutant le serveur SSH. La partie privée de la paire de clés est conservée en toute sécurité sur la machine cliente, tandis que la clé publique est copiée sur le serveur. Les clés publiques autorisées sur le serveur sont écrites, une par ligne, dans le fichier authorized_keys approprié. Son emplacement peut être configuré, mais le fichier se trouve généralement dans le répertoire ~/.ssh.

Pour copier une clé publique sur un serveur SSH, nous pouvons utiliser la commande ssh-copy-id. Supposons que le serveur écoute le port SSH par défaut (22), et que nous voulions copier la clé publique ~/.ssh/id_rsa.pub, en tant qu’utilisateur « foo » sur l’hôte « bar », nous exécuterions :

ssh-copy-id -i ~/.ssh/id_rsa.pub foo@bar

Pour que la commande réussisse, il nous sera demandé de fournir le mot de passe de connexion de l’utilisateur. Si tout se passe comme prévu, nous devrions enfin voir un message confirmant que la clé a été copiée :

    Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'foo@bar'"
and check to make sure that only the key(s) you wanted were added.

Si le serveur SSH a été configuré pour utiliser un port non standard, nous pouvons le spécifier en utilisant l’option -p et passer le numéro de port en argument :

ssh-copy-id -i ~/.ssh/id_rsa.pub -p <portnumber> foo@bar

Une fois qu’une clé a été copiée sur le serveur, elle apparaîtra dans le fichier « authorized_key » approprié. Si vous y jetez un coup d’œil, vous verrez que le format suivant est utilisé :

<key-type> <key-content> <optional-comment>

La section key-type indique le type de clé (par exemple, ecdsa, rsa) ; Le contenu de la clé est le contenu réel de la clé, encodé en base64, et le commentaire, qui est facultatif, est automatiquement ajouté au moment de la création de la clé et se compose généralement du nom d’utilisateur et du nom d’hôte de la machine cliente sur laquelle la clé a été générée. En voici un exemple :

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCS9exhL3nTEd9g9b14F0NLJ6glRi2aWQS7N5mWwtjmchy+9IfQNXUDME2EUfKzxumAZsqWvPxcUms9OkYil6R0CaP/YepninjiUec5lBU6jo1iG/xgTzNJYsHPde6fQmmCh+vdZbIf8+DDK+rVS7eLTWZViQzFpH8rBjT9hhAk1aWEtZp1b2ZbvVikNCTpZ+V7IDW/EtDNKyiJjZvUMmipDwf4+BPKUkTva+PBcxHrOa4U6poNvHIzq8ud+5YUPquV0kzywUprnMmusHlF/NpD6IolMM+of2OT/+plqh69KQs7DHsecXyKIhiDh08bU8c7QWuVTjj2GatvEoC4mbBGxqr7atOKmUB9yRzgQi+tEnAqUCqKn2naFVDwB1iMROmFPBAZxByHhTjjVEPfpQJi4TKIuMgvhmKmYaJCfIs2bl4MzE2PfKbSiAAG1sEAuS7QfWw5o0z2UWcGscJPRabtkjq6Gcfzwxi/50ogbuRcZ4Ia8dx3c0nCqRX1zSwXmEs= foo@bar

Liaison d’une clé publique à une commande spécifique

Afin de lier une clé publique SSH à une commande spécifique, nous devons utiliser un autre champ facultatif dans le fichier « authorized_keys ». Ce champ précède le « key-type » et peut être utilisé pour spécifier diverses options de connexion. Dans ce cas, ce que nous voulons faire, c’est passer le chemin complet de l’exécutable que nous voulons associer à la clé.

À titre d’exemple, supposons que nous voulions que la commande df -h /, qui affiche l’espace disponible et utilisé dans le système de fichiers racine, soit la seule autorisée lors de l’utilisation de la clé publique pour l’authentification. En reprenant l’exemple précédent, nous modifierions l’entrée dans le fichier « authorized_keys » de la manière suivante :

command="/usr/bin/df -h /" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCS9exhL3nTEd9g9b14F0NLJ6glRi2aWQS7N5mWwtjmchy+9IfQNXUDME2EUfKzxumAZsqWvPxcUms9OkYil6R0CaP/YepninjiUec5lBU6jo1iG/xgTzNJYsHPde6fQmmCh+vdZbIf8+DDK+rVS7eLTWZViQzFpH8rBjT9hhAk1aWEtZp1b2ZbvVikNCTpZ+V7IDW/EtDNKyiJjZvUMmipDwf4+BPKUkTva+PBcxHrOa4U6poNvHIzq8ud+5YUPquV0kzywUprnMmusHlF/NpD6IolMM+of2OT/+plqh69KQs7DHsecXyKIhiDh08bU8c7QWuVTjj2GatvEoC4mbBGxqr7atOKmUB9yRzgQi+tEnAqUCqKn2naFVDwB1iMROmFPBAZxByHhTjjVEPfpQJi4TKIuMgvhmKmYaJCfIs2bl4MzE2PfKbSiAAG1sEAuS7QfWw5o0z2UWcGscJPRabtkjq6Gcfzwxi/50ogbuRcZ4Ia8dx3c0nCqRX1zSwXmEs= foo@bar

La commande sera exécutée automatiquement à chaque fois que nous essaierons de nous connecter :

    $ ssh foo@bar
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/root        15G  2.3G   12G  17% /
    Connection to XXX.XXX.X.XX closed.

Dans certaines situations, nous pouvons avoir besoin d’effectuer des opérations plus complexes nécessitant l’utilisation de plus d’une seule commande, et d’inclure une certaine logique. Dans ces cas, nous pouvons créer un script et spécifier son chemin d’accès en tant que commande.

Contournement de la clé

Vous devez toujours vous assurer que vous disposez d’un autre moyen d’authentification lorsque vous liez une clé SSH à une seule commande, sinon vous risquez d’être bloqué hors du serveur. Si vous disposez d’une autre clé autorisée, vous pouvez l’utiliser explicitement pour la connexion :

ssh -o "IdentitiesOnly=yes" -F /dev/null -i /path/to/alternative/private/key foo@bar

Dans l’exemple ci-dessus, en utilisant -o IdentitiesOnly=yes, nous avons spécifié que nous voulons uniquement utiliser la clé que nous avons passée en argument à l’option -i, et nous avons utilisé -F /dev/null pour être sûrs qu’aucun fichier de configuration n’est analysé, car dans celui-ci, la clé restreinte pourrait être associée à la machine distante.

Comme alternative, si le serveur SSH est configuré pour autoriser l’authentification par mot de passe en texte clair tunnelisé, nous pouvons désactiver temporairement l’authentification par clé publique en exécutant :

ssh -o PubKeyAuthentication=no foo@bar

Conclusions

Dans ce tutoriel, nous avons vu comment lier une clé publique SSH à une seule commande spécifique. Nous avons également vu comment copier une clé publique sur un serveur, et comment contourner temporairement l’utilisation d’une clé restreinte.

Articles connexes: