Comment puis-je me rattacher à une session mosh détachée ou me débarrasser
Mosh: You have a detached Mosh session on this server (mosh [XXXX]).
c'est-à-dire quel est l'équivalent mosh de
screen -D -R
ou éventuellement
screen -wipe
De plus, où trouver cette réponse dans la documentation?
killall mosh-server
place? D'autant plus que pidof et killall sont vraiment la même chose de toute façon.killall
fait exactement ce qu'il dit.killall mosh-server
vous serez déconnecté.kill `pidof mosh-server`
vous serez détaché de la même manièreÀ ma grande surprise, j'ai utilisé CRIU ( https://criu.org ) pour vérifier et redémarrer un client mosh et cela a fonctionné.
Choquant.
Trouvez le PID de votre client mosh:
Ensuite, installez CRIU selon leurs instructions.
Ensuite, vérifiez-le comme ceci:
Ensuite, restaurez-le:
Et ça y est. Votre client mosh est de retour.
Une chose à noter, cependant, est que si votre ordinateur portable redémarre (ce qui est le but de ce contre quoi nous essayons de nous protéger), mosh utilise une
monotonic
horloge pour suivre l'heure côté client, ce qui ne fonctionne pas entre les redémarrages. Cela ne fonctionnera PAS, cependant, si votre ordinateur portable tombe tout simplement en panne, cela ne fonctionnera pas car les numéros de séquence mosh ne seront pas synchronisés avec la version qui a été vérifiée (le binaire reprendra, mais la communication s'arrêtera).Pour résoudre ce problème, vous devez dire à mosh d'arrêter de le faire et télécharger le code source de mosh. Ensuite, éditez ce fichier:
Ensuite, recherchez
GETTIME
et commentez cette ligne.Alors fais:
Après cela, vos sessions client mosh contrôlées par CRIU survivront aux redémarrages.
(De toute évidence, vous auriez besoin d'écrire quelque chose pour effectuer les points de contrôle assez régulièrement pour être utile. Mais c'est un exercice pour le lecteur).
la source
Je me rends compte qu'il s'agit d'un ancien article, mais il existe une solution très simple à cela, comme suggéré par Keith Winstein, auteur de mosh, ici: https://github.com/mobile-shell/mosh/issues/394
Scénario: je suis connecté à un serveur distant via mosh. J'ai ensuite exécuté screen et j'ai un processus en cours d'exécution dans la session d'écran, htop, par exemple. Je perds la connexion (la batterie de l'ordinateur portable meurt, perd la connexion réseau, etc.). Je me connecte à nouveau via mosh et reçois ce message sur le serveur,
Tout ce que j'ai à faire est de tuer la session précédente
et rattachez-le à la session d'écran, qui existe toujours .
Maintenant, htop (ou tout autre processus en cours d'exécution) est de retour tel qu'il était sans interruption, ce qui est particulièrement utile pour exécuter des mises à niveau ou d'autres processus qui laisseraient le serveur dans un état désordonné et inconnu s'il était soudainement interrompu. Je suppose que vous pouvez faire la même chose avec tmux, même si je ne l'ai pas essayé. Je crois que c'est ce que suggéraient Annihilannic et eskhool.
la source
En plus de la réponse de Varta, j'utilise la commande suivante pour fermer toutes les connexions mosh sauf celle actuelle:
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill
la source
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) && xargs kill || echo "no active sessions to kill"
Comme @varta l'a souligné, les propriétaires de mosh sont très opposés au rattachement de différents clients pour des raisons de sécurité. Donc, si votre client est parti (par exemple, vous avez redémarré votre ordinateur portable), votre seule option est de tuer les sessions.
Pour tuer uniquement les sessions détachées, vous pouvez utiliser la ligne suivante (que j'ai comme alias dans my
.bashrc
).Cette commande dépend du fait que
who
les utilisateurs connectés incluent les sessions mosh, seules les sessions mosh attachées ont "via mosh", et que les sessions mosh ont leur pid entre crochets. Il trouve donc les pids pour les sessions mosh détachées uniquement et les transmet à tuer en utilisant xargs.Voici un exemple de
who
résultat pour référence:Une alternative consiste à utiliser la variable d'environnement mosh-server
MOSH_SERVER_SIGNAL_TMOUT
. Vous pouvez le mettre à quelque chose comme 300 dans votre.bashrc
sur le côté serveur . Ensuite, si vous faites un,pkill -SIGUSER1 mosh-server
il ne tuera que les serveurs mosh qui n'ont pas été connectés au cours des 300 dernières secondes (les autres ignoreront le SIGUSER1). Plus d'informations dans la page de manuel de mosh-server . J'utilise la commande ci-dessus car, une fois aliasée, cela me semble plus simple.Notez, comme mentionné par @Annihilannic, si vous utilisez tmux / screen dans vos sessions mosh, ces sessions tmux / screen sont toujours là après que vous ayez tué les sessions mosh. Vous pouvez donc toujours vous y attacher (donc vous ne perdez vraiment pas grand chose en tuant les sessions mosh elles-mêmes).
la source
Les réponses ici affirmant que tuer
mosh-server
est la seule option sont largement obsolètes, car nous pouvons utilisercriu
etreptyr
récupérer et rattacher des processus arbitraires.Sans oublier que de nos jours, nous ne pouvons
kill -USR1 mosh-server
tuer que les sessions détachées de manière propre et sûre, sans recourir à unewho
sortie non sécurisée ou à des commandes lourdes pour éviter de tuer notre propre session.À côté de la
criu
réponse de Michael R. Hines, il y a le légèrement plus «léger»reptyr
qui peut être utilisé pour rattacher les processus lancés parmosh-server
(c'est-à-dire pas lemosh-server
lui - même). J'utilise généralementpour lister l'arborescence des processus sous le serveur mosh détaché, puis
pour rattacher le processus souhaité à mon terminal actuel. Après avoir répété la procédure pour tous les processus qui m'intéressent, je
alors que je prends soin de ne tuer que les sessions dont je sais qu'elles sont les miennes (système partagé).
la source
Unable to attach to pid 10103: Permission denied
Utilisez la commande ps pour obtenir la liste des tâches en cours d'exécution ou utilisez ps -ef | grep mosh
Tuez le mosh PID en utilisant cette commande:
De plus, pour fermer toutes les connexions mosh, vous pouvez:
Notez que si vous êtes actuellement connecté via mosh, cela vous déconnecte également
la source