sessões ssh persistentes sem screen ou tmux

3

Meu trabalho parece ter aleijado deliberadamente a tela e o tmux de tal forma que eles destroem todas as sessões no logout (eles não responderam quando eu abri um ticket sobre isso). ou seja, quando eu [desanexar e sair], seja com ctrl-D ou apenas feche o emulador de terminal em minha máquina local, e faça o login novamente, o tmux e a tela não terão mais sessões desconectadas.

1) Existe alguma maneira de contornar isso?

2) Se o sistema está eliminando todos os processos em segundo plano para usuários desconectados, não posso esperar recuperar uma sessão acidentalmente desconectada, mas existe uma ferramenta para gravar detalhes da sessão no disco? Como existe no emacs, por exemplo?

Ainda não sei quais detalhes fornecer, então, por favor, pergunte.

    
por Alejandro Erickson 27.03.2016 / 20:43

3 respostas

1

Além de executar emacs -nw via ssh (e salvar a sua sessão), suas opções são quase nulas, porque muito poucas ferramentas fazem isso ( fora dos desktops da GUI, cujas tentativas de fazer isso são freqüentemente bizarras).

Como seu "trabalho" quer matar sessões ociosas, elas provavelmente também limitaram ou eliminaram cron .

Você pode tentar nohup , mas normalmente isso é verificado e morto também. Qualquer administrador de sistemas competente já previu as soluções alternativas disponíveis para você.

    
por 27.03.2016 / 20:52
0

Existe uma solução para isso: Mosh !

Mosh usa UDP em vez de TCP e permite que o cliente altere os endereços IP e continue a sessão de um local diferente ou após um evento que teria quebrado uma conexão TCP. Ele também rastreia o conteúdo da tela (como screen e tmux ) no servidor, para que o servidor possa enviar as atualizações de tela necessárias para atualizar o cliente caso tenha perdido todas as atualizações enquanto estava desconectado. / p>

Mosh pega carona no SSH para fazer login e configurar a sessão, mas depois disso, usa seu próprio protocolo sobre o UDP.

    
por 27.03.2016 / 20:52
0
Tanto @Thomas Dickey quanto @Celada têm boas sugestões, e depois de brincar com isso por alguns dias eu tenho uma solução ok que pode ser de interesse.

Primeiro: Certamente você deve usar Mosh se estiver disponível no lado do servidor. Isso permitirá que você trabalhe com uma conexão defeituosa / lenta.

Em segundo lugar, use um editor que salvará seu trabalho em um desktop - o emacs tem isso, por exemplo. De acordo com a documentação e a variável desktop-auto-save-timeout , irá salvar automaticamente a cada 30 segundos por padrão no Emacs 24.4 quando usar (desktop-save-mode 1) em seu arquivo init. Note que o emacs pode bloquear um arquivo da área de trabalho para que o emacs reiniciado após o travamento não faça com sucesso (desktop-read) . Algum código de aqui me ajudou (mas eu não sei como funciona). Adicione ao seu arquivo init:

;;; desktop-override-stale-locks.el begins here
(defun emacs-process-p (pid)
    "If pid is the process ID of an emacs process, return t, else nil.
Also returns nil if pid is nil."
    (when pid
      (let ((attributes (process-attributes pid)) (cmd))
        (dolist (attr attributes)
          (if (string= "comm" (car attr))
              (setq cmd (cdr attr))))
        (if (and cmd (or (string= "emacs" cmd) (string= "emacs.exe" cmd))) t))))

(defadvice desktop-owner (after pry-from-cold-dead-hands activate)
  "Don't allow dead emacsen to own the desktop file."
  (when (not (emacs-process-p ad-return-value))
    (setq ad-return-value nil)))
;;; desktop-override-stale-locks.el ends here

Eu uso o tmux com o tmuxinator do lado do cliente que abre algumas janelas / painéis que ssh para meu diretório de trabalho do lado do servidor . Não é perfeito, mas ainda é bastante eficiente configurar o ambiente de trabalho com instâncias de htop e vários diretórios abertos usando meu shell faviourite. Algumas coisas úteis no meu arquivo de configuração do tmux:

# make sure your terminal emulator and tmux are on the same colour scheme, or your nice themes will get screwed up.
set -g default-terminal "xterm-256color"
#if you use vim in tmux you need this for quick ESC key sequences, else it gobbles up ESC key presses.
set -s escape-time 0
# Enable mouse mode (tmux 2.1 and above)
set -g mouse on
# don't rename windows automatically.  useful for window "categories"
set-option -g allow-rename off
# switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

E um trecho do meu arquivo de configuração yml do tmuxinator

windows:
  - ouput: # this is the name of a window
      layout: tiled
      panes: # these are some panes in said window
        - cd /some/directory               
        - cd /another/directory            
        - cd ~/
        - cd ~/
  - remoutput:
      layout: tiled
      panes:
        # cd to working dir and start up a zsh session
        - ssh me@host -t 'cd ~/working/dir; zsh -i'
        # repeat more panes and windows server-side

Ao desconectar as janelas do tmux com o ssh irá sair para um shell local onde o comando anterior era o comentário do tmux, então pelo menos é fácil subir + RET de volta para o servidor. Você desejará evitar as opções de "histórico incremental compartilhado" em seu ambiente para garantir que isso funcione.

Finalmente, se o seu sistema está determinado a matar sessões ociosas, peça ao seu cliente que envie um SSH por minuto para que eles não percebam que você está ocioso. Faça isso no .ssh / config com

Host *
    ServerAliveInterval 60

Eu deliberadamente deixei o emacs fora da configuração do tmuxinator por dois motivos. 1 tmux pode ser lento com editores de texto, lutando para atualizar tanto texto e 2 eu queria rodar o emacs no modo de servidor e ele pode já estar rodando quando eu inicio no tmux. Eu geralmente rodaria janelas separadas, cliente e lado do servidor, dedicadas ao emacs (com a mesma configuração, é claro) em execução no modo de servidor. Além disso, eu defino EDITOR="emacsclient -t", para que as tarefas de edição rápida se conectem instantaneamente ao servidor emacs onde quer que elas sejam chamadas. Todas essas tarefas, é claro, tornam-se parte do desktop do emacs! (se alguém quiser elaborar sobre como fazer isso com o outro editor, estou interessado.)

    
por 01.04.2016 / 12:35