Univers Apple

26
Mai
2019

Connexion à distance via le terminal sur macOS - Partie 2

Publié par sky

Lors d'un précédent article, nous avions vu les bases de la connexion à distance via le terminal en utilisant la commande SSH. Avec ce nouvel article, nous allons voir comment aller un peu plus loin dans l'utilisation de ssh.

 

Lancer une unique commande

Si vous devez vous connecter à une machine distante pour y exécuter une unique commande, il est possible de l'ajouter directement derrière la commande ssh afin d'obtenir le résultat immédiatement.

Par exemple, pour savoir depuis quand le Mac est lancé

ssh sky@MacPro.local uptime

j'indique le mot de passe de mon compte, et j'obtiens directement le resultat

16:13  up 25 days,  7:46, 11 users, load averages: 3.88 3.76 3.66

Après le résultat, je suis de retour sur mon appareil, je ne suis pas connecté au Mac distant.

 

Lancer des commandes persistantes

En ouvrant une session sur une machine distante, vous ouvrez un espace de travail sur cette machine. En fermant la session, ou si vous êtes déconnecté (à cause d'une coupure du réseau, par exemple), les commandes lancées seront perdues.

Pour que les commandes continuent à fonctionner après avoir fermer la session, il faut les mettre en fond de tâche, soit avec un & en fin de commande, soit avec ctrl+z pour mettre la commande en pause, puis bg pour la mettre en fond de tâche (background).

Pour l'exemple, nous allons lancer un ping infini dont l'affichage ira dans le néant. Cette commande ne se terminera pas tant que je ne l'aurai pas décidé.

Je me connecte donc à la machine distante, je lance ma commande, et enfin, je ferme la session.

ssh sky@MacPro.local 
ping localhost > /dev/null &
exit

Lorsque j'ai lancé le ping, la machine m'a renvoyé les données

[1] 80693

Cela indique que la commande dispose du PID 80693 et que si je veux la récupérer, il faut que j'indique l'identifiant 1.

Maintenant, reconnectons nous pour vérifier. Si votre machine distante est aussi votre machine locale, vous pouvez vérifier directement, cela sera plus rapide. Je cherche donc le processus "ping"

ps -acx | grep "ping"

et j'obtiens comme réponse

80693 ??         0:00.01 ping

Je retrouve bien le PID du processus, et le ?? m'indique que la session l'ayant créé n'existe plus.

Malheureusement, sans ré-assigner le processus, je ne peux plus le rattraper, et ma seule solution est de le tuer, en indiquant son PID, pour l'arrêter.

kill -1 80693

Si un processus sans fin peut poser soucis, comme ici, cette solution peut cependant être très pratique pour lancer une tâche s'arrêtant toute seule dès qu'elle est terminée, comme un backup, ou un encodage.

 

Ouvrir une session persistante

Pour aller encore plus loin, il est possible d'ouvrir une session à travers la connexion SSH. Cette session a l'avantage d'être persistante. Ainsi, même si la connexion se coupe, ou est quittée, il est possible de retrouver son espace de travail, tel qu'on l'avait laissé.

Les deux logiciels les plus connus, mais surtout disponibles sur macOS, sont screen et tmux. Screen est installé avec macOS, mais comme d'habitude avec Apple, il ne s'agit pas d'une version récente puisqu'elle date de 2006.

screen -v
Screen version 4.00.03 (FAU) 23-Oct-06

Heureusement, une version plus à jour est disponible sur Homebrew

brew info screen
screen: stable 4.6.2 (bottled), HEAD

tmux n'est pas installé avec macOS, il faut passer par Homebrew ou un autre installeur de paquets pour l'obtenir.

brew info tmux
tmux: stable 2.9a (bottled), HEAD

Je ne pourrai sincèrement pas vous dire lequel est le plus performant, car je n'utilise que screen, et encore pour une utilisation ultra-légère. Pour la suite de l'article, je ne parlerai donc que de screen.

Créons notre première session, en lui donnant un nom.

screen -S maSession

Vous voici devant un nouveau terminal tout neuf, prêt à être utilisé. Pour l'exemple, affichons le chemin, qui devrait être la racine de votre dossier utilisateur sur la machine sur laquelle vous êtes connectés

pwd

puis, listons en les éléments

ls -l

Maintenant sortons de notre console virtuelle, sans la quitter. Pour cela, il faut utiliser le raccourci clavier ctrl+a puis d.

Même si la session est détachée, les logiciels en cours continuent de fonctionner en fond de tâche, et c'est bien l'intérêt d'une telle application.

Vous revenez à votre connexion initiale. Quittez votre session SSH et relancez là. De nouveau connecté, nous allons récupérer notre session. Mais avant, comme il est possible de créer plusieurs sessions qui tourneraient en parallèle, il peut être pratique de regarder la liste des sessions ouvertes

screen -ls

J'obtiens le résultat

There is a screen on:
    68993.maSession    (Detached)
1 Socket in /tmp/uscreens/S-sky.

Pour récupérer la session que je souhaite

screen -r maSession

J'aurai pu aussi exécuter la commande

screen -r 

puis choisir la session qui m'intéresse.

Dans la sessions, vous devriez voir le résultat de vos précédentes commandes, à savoir les résultat de pwd et de ls -l.

Pour quitter définitivement la session, il suffit, une fois dedans, d'utiliser la commande habituelle

exit

Il n'est alors plus possible de reprendre la session, et elle n'apparait plus dans la liste.

Pour continuer, voici une fonctionnalité que j'adore avec screen. S'il n'est pas possible de récupérer une session déjà attachée par un autre utilisateur, screen permet une connexion en mode "spectateur", ainsi il est possible de voir ce que fait l'autre utilisateur en temps réel, très pratique pour voir l'évolution d'un projet ou d'une installation de logiciel.

screen -x maSession

Comme pour la commande -r, il est possible d'indiquer le nom de la session, ou de la choisir dans la liste.

Enfin, screen dispose d'une très longue page de man, qui contient toutes les options utilisables lors de son appel en ligne de commande. La page contient aussi toutes les commandes à utiliser à l'intérieur du logiciel, et qui commencent par ctrl+a. Comme d'habitude, pour y accéder

man screen

et ctrl+c ou simplement q pour en sortir.

 

Ca y est ? Terminé ?

Et bien ... non, ssh est un thème extrèmement vaste. Si nous nous sommes un peu éloigné de ssh avec l'utilisation de screen, nous pourrions encore en parler pendant de nombreux articles. Et parmi tous les sujets à notre portée, il y en a un, en particulier, qui nécessite un petit article. A très vite donc ...

 
Sommaire de la série
 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Les cookies assurent le bon fonctionnement de nos services. En continuant, vous acceptez leur utilisation sur notre site internet.
Accepter