¿Cómo me vuelvo a unir a una sesión separada de mosh o de lo contrario me deshago
Mosh: You have a detached Mosh session on this server (mosh [XXXX]).
es decir, ¿cuál es el equivalente mosh de
screen -D -R
o posiblemente
screen -wipe
Además, ¿dónde se puede encontrar esta respuesta en la documentación?
killall mosh-server
hacerlo? Especialmente porque pidof y killall son realmente lo mismo de todos modos.killall
hace exactamente lo que dice.killall mosh-server
, se desconectará.kill `pidof mosh-server`
, serás separado de la misma maneraPara mi sorpresa, utilicé CRIU ( https://criu.org ) para verificar y reiniciar un cliente mosh y funcionó.
Impactante.
Encuentre el PID de su cliente mosh:
Luego, instale CRIU de acuerdo con sus instrucciones.
Luego, apúntalo así:
Luego, restaurarlo:
Y ahí está. Su cliente Mosh ha vuelto.
Una cosa a tener en cuenta, sin embargo, es que si su computadora portátil se reinicia (que es el objetivo de lo que estamos tratando de proteger), mosh usa un
monotonic
reloj para rastrear el tiempo en el lado del cliente, que no funciona en los reinicios. Sin embargo, esto NO funcionará, si su computadora portátil simplemente se bloquea, no funcionará porque los números de secuencia mosh no estarán sincronizados con la versión que se verificó (el binario se reanudará, pero la comunicación se detendrá).Para solucionar esto, debe decirle a mosh que deje de hacerlo y descargue el código fuente de mosh. Luego, edite este archivo:
Luego, busque
GETTIME
y comente esa línea.Entonces hazlo:
Después de eso, sus sesiones de cliente mosh con CRIU verificadas sobrevivirán a los reinicios.
(Obviamente, necesitaría escribir algo para realizar los puntos de control con la suficiente regularidad como para ser útil. Pero, eso es un ejercicio para el lector).
fuente
Me doy cuenta de que esta es una publicación antigua, pero hay una solución muy simple para esto, como lo sugiere Keith Winstein, autor de mosh, aquí: https://github.com/mobile-shell/mosh/issues/394
Escenario: estoy conectado a un servidor remoto a través de mosh. Luego ejecuté la pantalla y tengo un proceso ejecutándose en la sesión de pantalla, htop, por ejemplo. Pierdo la conexión (la batería del portátil se agota, pierdo la conexión de red, etc.). Me conecto de nuevo a través de mosh y recibo ese mensaje en el servidor,
Todo lo que tengo que hacer es matar la sesión previa de mosh
y vuelva a conectar a la sesión de pantalla, que todavía existe .
Ahora, htop (o cualquier proceso que se esté ejecutando) está de regreso tal como estaba sin interrupción. Esto es especialmente útil para ejecutar actualizaciones u otros procesos que dejarían al servidor en un estado desordenado y desconocido si se interrumpe repentinamente. Supongo que puedes hacer lo mismo con tmux, aunque no lo he probado. Creo que esto es lo que sugirieron Annihilannic y eskhool.
fuente
Como una adición a la respuesta de Varta, utilizo el siguiente comando para cerrar todas las conexiones mosh excepto la actual:
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill
fuente
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) && xargs kill || echo "no active sessions to kill"
Como señaló @varta, los propietarios de mosh están muy en contra de la reincorporación de diferentes clientes por razones de seguridad. Entonces, si su cliente se fue (por ejemplo, reinició su computadora portátil), su única opción es matar las sesiones.
Para matar solo sesiones separadas, puede usar la siguiente línea (que tengo como un alias en mi
.bashrc
).Ese comando depende del hecho de que la
who
lista de usuarios conectados incluye sesiones mosh, solo las sesiones mosh adjuntas tienen "via mosh", y que las sesiones mosh tienen su pid entre corchetes. Por lo tanto, encuentra las imágenes solo para las sesiones de mosh separadas y las pasa para matar usando xargs.Aquí hay un ejemplo de
who
resultado para referencia:Una alternativa es utilizar la variable de entorno mosh-server
MOSH_SERVER_SIGNAL_TMOUT
. Usted puede configurarlo para que algo así como 300 en el.bashrc
de la lado del servidor . Luego, si lo hacepkill -SIGUSER1 mosh-server
, solo matará a los servidores mosh que no se hayan conectado en los últimos 300 segundos (los demás ignorarán el SIGUSER1). Más información en la página de manual de mosh-server . Estoy usando el comando anterior porque, una vez alias, me parece más simple.Tenga en cuenta que, según lo mencionado por @Annihilannic, si está usando tmux / screen dentro de sus sesiones de mosh, esas sesiones de tmux / screen siguen vigentes después de matar las sesiones de mosh. Por lo tanto, aún puede apegarse a ellos (para que realmente no pierda mucho al matar las sesiones de mosh).
fuente
Las respuestas aquí que afirman que matar
mosh-server
es la única opción son en gran medida obsoletas, ya que podemos usarcriu
yreptyr
recuperar y volver a unir procesos arbitrarios.Sin mencionar que hoy en día podemos
kill -USR1 mosh-server
matar sesiones separadas de una manera limpia y segura, sin recurrir awho
salidas inseguras o comandos engorrosos para evitar matar nuestra propia sesión.Junto a la
criu
respuesta de Michael R. Hines, existe un poco más "ligero"reptyr
que se puede utilizar para volver a unir los procesos iniciados pormosh-server
(es decir, no elmosh-server
propio). Yo suelo usarpara enumerar el árbol de procesos en el servidor mosh separado, y luego
para volver a conectar el proceso deseado a mi terminal actual. Después de repetir el procedimiento para todos los procesos que me interesan, yo
mientras que me encargo de matar solo las sesiones que sé que son mías (sistema compartido).
fuente
Unable to attach to pid 10103: Permission denied
Use el comando ps para obtener la lista de tareas en ejecución o use ps -ef | grep mosh
Mata el PID mosh usando este comando:
Además, para cerrar todas las conexiones mosh puedes:
Tenga en cuenta que si actualmente está conectado a través de mosh, esto también lo desconecta
fuente