tmux sur deux serveurs (modif le 15 aout 2022)
Article mis en ligne le 10 juillet 2022
dernière modification le 15 août 2022

par Rémi

Un alias pour atteindre mes serveurs directement en session tmux.
Le code suivant est dans /.bash_aliases sur mon portable.
Sur les deux serveurs , il faut installer tmux (sous debian : apt install tmux)
Cela permet de ne pas perdre les sessions en cours, même lorsque la connexion se ferme inopinément, ou que l’on va se coucher : ’Control b’ puis ’d’ dans tmux, cela ferme la connexion, mais tout ce que vous faites dedans continu à tourner ! (ou il suffit de fermer le portable, c’est pareil). Un exemple concret ?
Je viens de migrer mon routeur wifi de openwrt vers debian. J’en ai profité pour placer un ssd à la place du disque dur initial.
Pour faire les copies de fichiers, j’ai branché l’ancien disque sur le serveur (pas de port sur le routeur), puis exécuté toujours sur le serveur, dans une session tmux, un sftp, commencé à recopier les fichiers assez gros (oui très gros). Je ferme la connexion , sftp continu de fonctionner, et je reviens le lendemain tout est fini. mais tmux fonctionne encore, la connexion par sftp n’est même pas fermée !
Pour éviter les mots de passes, et sécuriser (un peu) la connexion ssh, je crée un premier une clé sur le portable que j’exporte sur le serveur (là c’ets simple, mais on peut faire une clé par serveur, c’est mieux)

$ ssh-keygen -t ed25519 

demande de mettre un mot de passe (à faire ou non, à vous de voir)
Copie de la clé :

ssh-copy-id -p 12345 <user>@<adresse du serveur>

Un dernier détail : si on modifie le script, il faut le faire ’relire’ par bash :

$ source ~/.bashrc

Et maintenant le code :

# connexion à une session tmux nommée, sur le routeur ou le serveur selon le mot clef donné
# vyger pour le routeur (il faut avoir la réference pour le nom...)
# seven pour le serveur
# tmux attach pour récupérer la session // tmux new pour la créer si elle n'existe pas
# --------------------------------------------------------------------------------------------
# -- R. Suinot -- remi[at]suinot<pnt>org --
# 1ere version: 10 juil 2022
#          rev: 14 aout 2022
# --------------------------------------------------------------------------------------------
function ssh_tmux() { 
        ROUTEUR="adresse du routeur"
        SERVEUR="adresse du serveur"
        PORT_R="port du routeur"
        PORT_S="port du serveur"

        if [ $1 = "routeur" ]
        then
                nc -zv $ROUTEUR $PORT_R 2&> /dev/null  && ssh -t "$ROUTEUR" "tmux attach -t vyger || tmux new -s vyger" || echo "Pas de réponse du serveur ssh."
        elif [ $1 = "serveur" ]
        then
                # nc -zv $SERVEUR $PORT_S 2&> /dev/null && ssh -p "$PORT_S" -t "$SERVEUR" "tmux attach || tmux" || echo "Pas de réponse du serveur ssh.";
                ssh -p "$PORT_S" -t "$SERVEUR" "tmux attach -t seven || tmux new -s seven" || echo "Pas de réponse du serveur ssh.";
        else
                echo "ssh_tmux [routeur][serveur]";
        fi

}