Вопрос или проблема
У меня есть сервер Windows, на котором работает WSL, так что когда я подключаюсь через SSH (openssh), я автоматически вхожу в WSL (что я настроил через конфигурации SSH в Windows).
В WSL я пробовал использовать tmux, но после отсоединения, выхода и повторного входа в систему сеанс tmux закрывается. Как я могу это исправить?
Шаги для воспроизведения:
- подключиться к WSL через ssh
tmux new
ctrl+B D
для отсоединенияexit
из ssh- снова зайти в WSL через ssh
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)
.
Пример
Разберем этапы, которые вы описали:
- Вы подключаетесь к WSL через SSH.
- Запускаете новую сессию tmux с помощью команды
tmux new
. - Отсоединяете сессию с помощью комбинации
Ctrl+B D
. - Отсоединяетесь от сеанса SSH командой
exit
. - При повторном подключении и введении команды
tmux ls
видите сообщение об ошибке.
Эта последовательность отображает, что tmux-сессия фактически закрывается или теряется при разрыве SSH-соединения. Это может происходить по нескольким причинам, связанным с настройками окружения в WSL и особенностями работы tmux в контексте WSL.
Использование
Решение проблемы
Чтобы решить проблему с сохранением tmux-сессии между отключениями и повторными подключениями к SSH в WSL, следует обратить внимание на несколько аспектов:
-
Демонизация tmux-сессии:
Убедитесь, что tmux-сессия может работать в фоновом режиме и не зависит от текущего SSH-соединения. Одним из способов решения может быть использование командыtmux new-session -d
, чтобы запустить tmux в фоне. -
Задержка завершения оболочки:
Если сессия tmux закрывается из-за завершения дочерних процессов, попробуйте изменить команду входа в систему в SSH, чтобы избежать автоматического выхода. Проверьте, нет ли у вас настроек, которые завершали бы работу при завершении первоначально открытого процесса. -
Использование screen как альтернативы:
Если проблема не решается, попробуйте использовать screen — другая утилита для работы с терминальными мультиплексорами. Screen может оказаться более устойчивым в некоторых конфигурациях WSL. -
Проверка версии и конфигурации WSL:
Убедитесь, что у вас самая последняя версия WSL и OpenSSH. Возможно, в более новых версиях были исправлены некоторые из проблем, влияющих на работу процессов. -
Автономное исполнение:
Запускtmux
в автономной сессии илиdetached
-режиме начальной команды. Это гарантирует, что при выходе из SSH процесса, он не будет завершаться. -
Пользовательские права и настройки:
Убедитесь, что права доступа в директории /tmp настроены правильно для вашего пользователя, и что у вас есть все необходимые разрешения на создание и управление сокетами tmux.
Примеры решений:
-
Создайте скрипт для запуска tmux:
Создайте скрипт, который автоматически запускает или восстанавливает tmux-сессию при входе в WSL. Это можно сделать, добавив в ваш профайл (.bashrc или .zshrc) следующую строку:[[ $TMUX == "" ]] && exec tmux
-
Используйте nohup:
Запуск tmux с использованиемnohup
может помочь отделить процесс от текущей сеансовой сессии:nohup tmux new-session -d
НАСТРИВАНИЕ
Ваша задача — протестировать эти подходы и определить, какой из них лучше всего соответствует вашей конфигурации системы. Сделав правильную настройку, вы сможете эффективно использовать tmux в WSL без риска потери данных при разрыве SSH-соединения. Важно учитывать особенности вашей конкретной настройки, включая права доступа и версии используемых программ.