tmux отключается при отключении от ssh в WSL

Вопрос или проблема

У меня есть сервер Windows, на котором работает WSL, так что когда я подключаюсь через SSH (openssh), я автоматически вхожу в WSL (что я настроил через конфигурации SSH в Windows).

В WSL я пробовал использовать tmux, но после отсоединения, выхода и повторного входа в систему сеанс tmux закрывается. Как я могу это исправить?

Шаги для воспроизведения:

  1. подключиться к WSL через ssh
  2. tmux new
  3. ctrl+B D для отсоединения
  4. exit из ssh
  5. снова зайти в WSL через ssh
  6. tmux ls выдает следующий вывод: error connecting to /tmp/tmux-1000/default (No such file or directory)

Я не могу реализовать следующее: сеанс tmux завершается при отключении от SSH

Потому что если я посмотрю статус systemcl для ssh и ssh.socket:
Unit ssh.service could not be found.
Unit ssh.socket could not be found.
Так как я вхожу в WSL, который не понимает ssh из Windows.

Ответ или решение

Проблема заключается в потере tmux-сессии при отключении от SSH-соединения в WSL (Windows Subsystem for Linux). Эта ситуация достаточно распространена, и решение требует понимания работы tmux, а также некоторых особенностей взаимодействия между Windows и WSL.

Теория

tmux — это мультиплексор терминалов, который позволяет пользователям Unix-подобных систем управлять несколькими терминальными сеансами одновременно. Сессии tmux продолжают работать даже после того, как вы отсоединитесь, и обычно их можно восстановить, повторно подключившись. Однако в вашей ситуации наблюдается проблема, когда сессия tmux исчезает при выходе из SSH-сессии, что вызывает ошибку error connecting to /tmp/tmux-1000/default (No such file or directory).

Пример

Разберем этапы, которые вы описали:

  1. Вы подключаетесь к WSL через SSH.
  2. Запускаете новую сессию tmux с помощью команды tmux new.
  3. Отсоединяете сессию с помощью комбинации Ctrl+B D.
  4. Отсоединяетесь от сеанса SSH командой exit.
  5. При повторном подключении и введении команды tmux ls видите сообщение об ошибке.

Эта последовательность отображает, что tmux-сессия фактически закрывается или теряется при разрыве SSH-соединения. Это может происходить по нескольким причинам, связанным с настройками окружения в WSL и особенностями работы tmux в контексте WSL.

Использование

Решение проблемы

Чтобы решить проблему с сохранением tmux-сессии между отключениями и повторными подключениями к SSH в WSL, следует обратить внимание на несколько аспектов:

  1. Демонизация tmux-сессии:
    Убедитесь, что tmux-сессия может работать в фоновом режиме и не зависит от текущего SSH-соединения. Одним из способов решения может быть использование команды tmux new-session -d, чтобы запустить tmux в фоне.

  2. Задержка завершения оболочки:
    Если сессия tmux закрывается из-за завершения дочерних процессов, попробуйте изменить команду входа в систему в SSH, чтобы избежать автоматического выхода. Проверьте, нет ли у вас настроек, которые завершали бы работу при завершении первоначально открытого процесса.

  3. Использование screen как альтернативы:
    Если проблема не решается, попробуйте использовать screen — другая утилита для работы с терминальными мультиплексорами. Screen может оказаться более устойчивым в некоторых конфигурациях WSL.

  4. Проверка версии и конфигурации WSL:
    Убедитесь, что у вас самая последняя версия WSL и OpenSSH. Возможно, в более новых версиях были исправлены некоторые из проблем, влияющих на работу процессов.

  5. Автономное исполнение:
    Запуск tmux в автономной сессии или detached-режиме начальной команды. Это гарантирует, что при выходе из SSH процесса, он не будет завершаться.

  6. Пользовательские права и настройки:
    Убедитесь, что права доступа в директории /tmp настроены правильно для вашего пользователя, и что у вас есть все необходимые разрешения на создание и управление сокетами tmux.

Примеры решений:

  1. Создайте скрипт для запуска tmux:
    Создайте скрипт, который автоматически запускает или восстанавливает tmux-сессию при входе в WSL. Это можно сделать, добавив в ваш профайл (.bashrc или .zshrc) следующую строку:

    [[ $TMUX == "" ]] && exec tmux
  2. Используйте nohup:
    Запуск tmux с использованием nohup может помочь отделить процесс от текущей сеансовой сессии:

    nohup tmux new-session -d

НАСТРИВАНИЕ

Ваша задача — протестировать эти подходы и определить, какой из них лучше всего соответствует вашей конфигурации системы. Сделав правильную настройку, вы сможете эффективно использовать tmux в WSL без риска потери данных при разрыве SSH-соединения. Важно учитывать особенности вашей конкретной настройки, включая права доступа и версии используемых программ.

Оцените материал
Добавить комментарий

Капча загружается...