Vu que le déploiement des développements sur le serveur de staging n'est pas automatisé, il faut donner un accès au serveur à plusieurs utilisateurs pour qu'ils le fassent manuellement.

Par défaut les utilisateurs sont accueillis sur une session tmux à la connexion.

Le problème c'est que quand plusieurs utilisateurs sont connectés, un seul utilisateur prend la main ce qui oblige les autres à attendre.

Pour contourner ce problème on peut utiliser les sessions de tmux. Chaque utilisateur aura ainsi une session à son nom.

Ces sessions personalisées sont toutes connectées à la session principale partagée mais chaque utilisateur pourra naviguer sur le window qui le concerne sans emporter avec lui les autres utilisateurs connectés.

Même si deux utilisateurs sont connectés au même window, ils disposeront de leur curseur personnel et pourront travailler simultanément et indépendemment sur deux panes. FIXME

Pour catcher le nom de l'utilisateur à la connexion on autorise l'exportation de variables d'environnement à la connexion en paramétrant le serveur ssh comme suit :

/etc/ssh/sshd_config
PermitUserEnvironment yes

Ainsi, ajouter une clé ssh de la manière suivante au fichier ~/.ssh/autorized_keys (remarquez le début de la ligne environment=“LC_SSH_USER=aziz”) ouvrira une session tmux nommée aziz.

environment="LC_SSH_USER=aziz" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoY3PXIAtJLRk5EU7kfST0BIaiTmp6iVtDKZm+IKsmqG5V0HIjvDeMfXOM8Rx+3lpZRmiGrfvsEpDSe9IHCjqwqtzB3VWSVFcAY/b55FSvbIZGnKuunVYyvYbbY1E8BodeBHnwaPEplHthQNBoDD+mpBiphyNZU72npkRmKyATvgQ62oB3QTNk8bM7L2/Biw1FjVpfZjXmMsivfGA/fSp+r0BEmPEfx+gRDJ6jQ6rfoWtOoadEI18ROpyH6X/5unFPq9qQuBVHrfTQmX9a3tq35FAHWCdNJhTvnMI6/P9BjUCGjygH+1cr2+c3brwt4syv4wP4mHF+pckG3nbxyeq5 aziz@mini

Suivent les fichier nécessaires pour finir ce dispositif.

~/.profile
if [ -f ~/.fire_tmux.bash ]; then
    source ~/.fire_tmux.bash
fi
~/.fire_tmux.bash
function plug-in-tmux() {
    if `tmux ls -F '#{session_name}' | grep $LC_SSH_USER >/dev/null` ; then
        tmux attach -t $LC_SSH_USER
    else
        tmux new -s $LC_SSH_USER -t SDDEV
    fi
}
 
if [ -z "$TMUX" ]; then
    if [[ `hostname` == "dockerservice" ]]; then
        plug-in-tmux || tmuxinator start ssh_tmux || tmux new -s ssh_tmux
    else
        tmux attach || tmuxinator start ssh_tmux || tmux new -s ssh_tmux
    fi
fi
  • system_administration/infrastructure/tmux_multi_users.txt
  • Last modified: 2022/03/18 21:34
  • by aziz