постоянные сеансы ssh без экрана или tmux

Моя работа, по-видимому, преднамеренно исказила экран и tmux, чтобы они уничтожали все сеансы при выходе из системы (они не ответили, когда я открыл билет об этом). т.е. когда I [отсоединить и] выйти из системы, либо с помощью ctrl-D, либо просто закрыть эмулятор терминала на моем локальном компьютере, и снова войти в систему, tmux и экран больше не будут иметь отдельных сеансов.

1) Есть ли способ обойти это?

2) Если система убивает все фоновые процессы для зарегистрированных пользователей, я не могу рассчитывать на восстановление случайно отключенного сеанса, но есть ли инструмент для записи деталей сеанса на диск? Например, в emacs, например?

Я не знаю, какие детали предоставить, так что, пожалуйста, спросите.

  • Скрытый ввод Tmux в командной строке
  • Как остановить tmux, фиксируя последовательности клавиш?
  • Как раскрасить последнее окно в строке состояния?
  • Есть ли способ заставить скрипт Bash ввести определенное нажатие клавиши?
  • Как сопоставить j / k с <Up> / <Down> для приложения только в терминальном эмуляторе?
  • Настройка цвета tmux hightlight
  • Возможно ли стиль tmux для каждого сеанса?
  • tmux эквивалентен экрану GNU: режим обертывания
  • 3 Solutions collect form web for “постоянные сеансы ssh без экрана или tmux”

    Помимо запуска emacs -nw через ssh (и с сохранением его сеанса), ваши параметры ничтожны, потому что очень мало инструментов делают это (за пределами рабочих столов графического интерфейса, чьи попытки сделать это часто причудливы).

    Поскольку ваша «работа» хочет убить незанятые сеансы, они, вероятно, также ограничивают или исключают cron .

    Вы можете попробовать nohup , но обычно это проверено и убито. Любой компетентный системный администратор уже предупреждает обходных решениях, которые вам доступны.

    Для этого есть решение: Мош !

    Мош использует UDP вместо TCP и позволяет клиенту изменять IP-адреса и продолжать сеанс из другого места или после события, которое нарушило бы TCP-соединение. Он также отслеживает содержимое экрана (например, screen и tmux ) на сервере, чтобы сервер мог отправлять необходимые обновления экрана, чтобы обновить клиент, если он пропустил какие-либо обновления, пока он был отключен.

    Mosh piggybacks на SSH для первоначального входа в систему и настройки сеанса, но после этого он использует свой собственный протокол через UDP.

    И у @Thomas Dickey, и у @Celada есть хорошие предложения, и после того, как я общался с этим в течение нескольких дней, у меня есть хорошее решение, которое может представлять интерес.

    Во-первых: Конечно, вы должны использовать Mosh, если он доступен на стороне сервера. Это позволит вам работать с неисправным / медленным подключением.

    Во-вторых, используйте редактор, который сохранит вашу работу на рабочем столе. Например, emacs имеет это. В соответствии с документацией и переменной desktop-auto-save-timeout , она будет desktop-auto-save-timeout каждые 30 секунд по умолчанию в Emacs 24.4 при использовании (desktop-save-mode 1) в вашем файле инициализации. Обратите внимание, что emacs может заблокировать файл рабочего стола, чтобы emacs перезапустился после сбоя, который не будет успешно выполнен (desktop-read) . Некоторый код отсюда помог мне (но я не знаю, как это работает). Добавьте его в файл инициализации:

     ;;; 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 

    Я использую tmux с клиентской стороной tmuxinator, которая открывает несколько окон / панелей, которые ssh относятся к моей рабочей директории на стороне сервера . Это не идеально, но по-прежнему довольно эффективно настраивать рабочую среду с примерами htop и различными открытыми каталогами, используя мою faviourite shell. Несколько полезных вещей в моем файле конфигурации 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 

    И фрагмент моего файла конфигурации tmuxinator yml

     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 

    После отключения tmux-окон ssh выйдет в локальную оболочку, где предыдущей командой был комментарий tmux, поэтому, по крайней мере, легко вернуться на сервер + RET. Вам нужно избегать опций «shared incremental history» в вашей среде, чтобы убедиться, что это работает.

    Наконец, если ваша система настроена на то, чтобы убивать сеансы бездействия, просто попросите своего клиента отправить SSH каждую минуту или около того, чтобы они не понимали, что вы простаиваете. Сделайте это в .ssh / config с помощью

     Host * ServerAliveInterval 60 

    Я намеренно покинул emacs из конфигурации tmuxinator по двум причинам. 1 tmux может быть медленным с текстовыми редакторами, изо всех сил пытаться обновить столько текста и 2 Я хотел запустить emacs в режиме сервера, и он может быть запущен при запуске в tmux. Обычно я запускаю отдельные окна, клиентские и серверные, предназначенные для emacs (с той же конфигурацией, конечно), работающие в режиме сервера. Кроме того, я устанавливаю EDITOR = "emacsclient -t", так что задачи быстрого редактирования будут мгновенно подключаться к серверу emacs везде, откуда они вызываются. Все эти задачи, конечно же, станут частью рабочего стола emacs! (если кто-то хочет уточнить, как это сделать с другим редактором, я заинтересован.)

    Linux и Unix - лучшая ОС в мире.