Como reconectar a uma sessão mosh separada ou me livrar de
Mosh: You have a detached Mosh session on this server (mosh [XXXX]).
ou seja, qual é o equivalente mosh de
screen -D -R
ou possivelmente
screen -wipe
Além disso, onde esta resposta pode ser encontrada na documentação?
killall mosh-server
? Especialmente porque pidof e killall são realmente a mesma coisa de qualquer maneira.killall
faz exatamente o que diz.killall mosh-server
, será desconectado.kill `pidof mosh-server`
você vai ser retirado da mesma formaPara minha surpresa, usei o CRIU ( https://criu.org ) para verificar e reiniciar um cliente mosh e funcionou.
Chocante.
Encontre o PID do seu mosh-client:
Em seguida, instale o CRIU de acordo com as instruções.
Em seguida, verifique-o assim:
Em seguida, restaure-o:
E aí está. Seu cliente mosh está de volta.
Uma coisa a ser observada, no entanto, é que, se o seu laptop for reiniciado (que é o objetivo principal do que estamos tentando proteger), o mosh usará um
monotonic
relógio para rastrear o tempo no lado do cliente, o que não funcionará durante as reinicializações. Isso NÃO funcionará, no entanto, se seu laptop travar, ele não funcionará porque os números de sequência mosh estarão fora de sincronia com a versão que foi marcada (o binário será retomado, mas a comunicação será interrompida).Para corrigir isso, você precisa dizer ao mosh para parar de fazer isso e baixar o código-fonte do mosh. Em seguida, edite este arquivo:
Em seguida, pesquise
GETTIME
e comente essa linha.Então faça:
Depois disso, suas sessões mosh client com ponto de verificação CRIU sobreviverão às reinicializações.
(Obviamente, você precisará escrever algo para executar os pontos de verificação regularmente o suficiente para ser útil. Mas isso é um exercício para o leitor).
fonte
Percebo que este é um post antigo, mas há uma solução muito simples para isso, conforme sugerido por Keith Winstein, autor do mosh, aqui: https://github.com/mobile-shell/mosh/issues/394
Cenário: Estou conectado a um servidor remoto via mosh. Em seguida, executei a tela e tenho um processo em execução na sessão de tela, htop, por exemplo. Perco a conexão (a bateria do laptop acaba, a conexão de rede etc.). Eu me conecto novamente via mosh e recebo essa mensagem no servidor,
Tudo o que tenho a fazer é matar a sessão anterior do mosh
e reconecte à sessão da tela, que ainda existe .
Agora, o htop (ou qualquer outro processo em execução) está de volta exatamente como estava sem interrupção. Isso é especialmente útil para executar atualizações ou outros processos que deixariam o servidor em um estado desconhecido e confuso se interrompido repentinamente. Presumo que você possa fazer o mesmo com o tmux, embora eu não tenha tentado. Acredito que isso é o que Annihilannic e eskhool estavam sugerindo.
fonte
Como complemento à resposta de Varta, uso o seguinte comando para fechar todas as conexões mosh, exceto a atual:
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill
fonte
pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) && xargs kill || echo "no active sessions to kill"
Como o @varta apontou, os proprietários do mosh são muito contra a recolocação de diferentes clientes por motivos de segurança. Portanto, se seu cliente se foi (por exemplo, você reiniciou o seu laptop), sua única opção é interromper as sessões.
Para matar apenas sessões desanexadas, você pode usar a seguinte linha (que eu tenho como um alias no meu
.bashrc
).Esse comando depende do fato de que
who
lista usuários conectados, incluindo sessões mosh, apenas as sessões mosh anexadas têm "via mosh" e que as sessões mosh têm seu pid entre colchetes. Por isso, encontra os pids apenas das sessões mosh desanexadas e as transmite para matar usando xargs.Aqui está um exemplo de
who
resultado para referência:Uma alternativa é usar a variável de ambiente mosh-server
MOSH_SERVER_SIGNAL_TMOUT
. Você pode configurá-lo para algo como 300 em sua.bashrc
no lado do servidor . Então, se você fizerpkill -SIGUSER1 mosh-server
isso, ele matará apenas os servidores mosh que não foram conectados nos últimos 300 segundos (os outros ignorarão o SIGUSER1). Mais informações na página do manual mosh-server . Estou usando o comando acima porque, uma vez aliasado, parece mais simples para mim.Observe, como mencionado por @Annihilannic, se você estiver usando o tmux / screen dentro de suas sessões mosh, essas sessões tmux / screen ainda estarão disponíveis depois que você terminar as sessões mosh. Então você ainda pode se apegar a eles (para não perder muito matando as próprias sessões do mosh).
fonte
As respostas aqui alegando que matar
mosh-server
é a única opção são em grande parte obsoletas, pois podemos usarcriu
ereptyr
recuperar e anexar novamente processos arbitrários.Sem mencionar que hoje em dia só podemos
kill -USR1 mosh-server
matar sessões desanexadas de maneira limpa e segura, sem recorrer awho
saídas inseguras ou comandos pesados para evitar matar nossa própria sessão.Ao lado da
criu
resposta de Michael R. Hines, há um pouco mais "leve"reptyr
que pode ser usado para anexar novamente os processos iniciadosmosh-server
(ou seja, não omosh-server
próprio). Eu normalmente usopara listar a árvore de processos no servidor mosh desanexado e, em seguida,
para reconectar o processo desejado ao meu terminal atual. Depois de repetir o procedimento para todos os processos que me interessam, eu
enquanto eu cuido de matar apenas as sessões que eu sei que são minhas (sistema compartilhado).
fonte
Unable to attach to pid 10103: Permission denied
Use o comando ps para obter a lista de tarefas em execução ou use ps -ef | grep mosh
Mate o PID mosh usando este comando:
Além disso, para fechar todas as conexões mosh, você pode:
Observe que se você estiver atualmente conectado via mosh, isso também o desconectará
fonte