В этой статье мы покажем, как настроить меню выбора сеанса tmux, которое активируется при SSH-входе в удаленную Linux-систему.
В этом меню будут перечислены существующие сессии tmux и предложена возможность создания новой сессии.
- Введение
- Шаг 1: Создание скрипта меню Tmux
- Объяснение скрипта:
- 1. Скрипт Shebang:
- 2. Получим существующие сеансы tmux:
- 3. Проверим наличие существующих сеансов tmux:
- 4. Отображение существующих сеансов и запрос пользователю:
- 5. Обработка пользовательского ввода:
- Шаг 2: Сделаем скрипт исполняемым
- Шаг 3. Обновление профиля Bash
- Шаг 4: Проверка настройки меню выбора сеанса Tmux
- Заключение
Введение
Tmux, терминальный мультиплексор, позволяет управлять несколькими терминальными сессиями в одном окне.
Это особенно удобно при работе с удаленными системами по протоколу SSH.
Общепринятой практикой является автоматическое присоединение к сессии tmux при входе в систему по SSH.
Однако что, если вы хотите иметь больше контроля над этим, например, иметь возможность выбирать из существующих сессий или создавать новую?
Это можно сделать с помощью Bash-скрипта.
В следующих шагах мы покажем вам, как улучшить удаленный вход в систему по SSH с помощью скрипта Tmux Session Selector на Linux.
Шаг 1: Создание скрипта меню Tmux
Сначала мы создадим скрипт tmux_menu.sh со следующим содержанием.
Этот скрипт будет получать существующие сессии tmux, отображать их пользователю и позволять ему либо подключиться к одной из них, либо создать новую сессию.
#!/bin/bash # Get a list of existing tmux sessions: TMUX_SESSIONS=$(tmux ls | awk -F: '{print $1}') # If there are no existing sessions: if [[ -z $TMUX_SESSIONS ]]; then echo "No existing tmux sessions. Creating a new session called 'default'..." tmux new -s default else # Present a menu to the user: echo "Existing tmux sessions:" echo "$TMUX_SESSIONS" echo "Enter the name of the session you want to attach to, or 'new' to create a new session: " read user_input # Attach to the chosen session, or create a new one: if [[ $user_input == "new" ]]; then echo "Enter name for new session: " read new_session_name tmux new -s $new_session_name else tmux attach -t $user_input fi fi
Сохраните этот скрипт в файле с именем tmux_menu.sh в домашнем каталоге.
Объяснение скрипта:
Давайте разберем предоставленный скрипт по частям:
1. Скрипт Shebang:
#!/bin/bash
Шибанг (#!/bin/bash) используется для указания интерпретатора для выполнения скрипта.
В данном случае это bash.
Какова функция Шебанг в Linux?
2. Получим существующие сеансы tmux:
# Get a list of existing tmux sessions: TMUX_SESSIONS=$(tmux ls | awk -F: '{print $1}')
В этом фрагменте tmux ls выводит список всех существующих сессий tmux.
Полученный результат передается по трубопроводу (|) в awk, который затем обрабатывает его для извлечения только имен сессий (перед двоеточием :).
Эти имена сохраняются в переменной TMUX_SESSIONS.
3. Проверим наличие существующих сеансов tmux:
# If there are no existing sessions: if [[ -z $TMUX_SESSIONS ]]; then echo "No existing tmux sessions. Creating a new session called 'default'..." tmux new -s default else ... fi
Здесь блок if-else проверяет, пуст ли TMUX_SESSIONS (-z проверяет наличие строки нулевой длины).
Если он пуст, то это означает, что существующих сессий нет, поэтому с помощью команды tmux new -s default создается новая сессия с именем ‘default’.
Если он не пуст, то скрипт переходит к блоку else.
4. Отображение существующих сеансов и запрос пользователю:
# Present a menu to the user: echo "Existing tmux sessions:" echo "$TMUX_SESSIONS" echo "Enter the name of the session you want to attach to, or 'new' to create a new session: " read user_input
В блоке else скрипт сначала отображает существующие сессии tmux.
Затем пользователю предлагается либо ввести имя существующей сессии, к которой он хочет присоединиться, либо набрать ‘new’ для создания новой сессии.
Команда read используется для перехвата ввода пользователя.
5. Обработка пользовательского ввода:
# Attach to the chosen session, or create a new one: if [[ $user_input == "new" ]]; then echo "Enter name for new session: " read new_session_name tmux new -s $new_session_name else tmux attach -t $user_input fi
В зависимости от введенного пользователем значения используется еще один блок if-else для выполнения следующих шагов.
Если пользователь ввел “new”, то ему предлагается ввести имя новой сессии, которая затем создается с помощью команды tmux new -s $new_session_name.
Если пользователь ввел имя существующей сессии, то скрипт подключается к ней с помощью команды tmux attach -t $user_input.
Таким образом, данный скрипт предоставляет простой пользовательский интерфейс при входе в систему для присоединения к существующей сессии tmux или создания новой сессии, что повышает удобство работы с несколькими сессиями tmux.
Шаг 2: Сделаем скрипт исполняемым
Предоставьте права на выполнение сценария с помощью следующей команды:
Шаг 3. Обновление профиля Bash
Теперь обновите файл ~/.bash_profile на удаленной системе, чтобы вызывать этот скрипт при каждом входе в систему по SSH, но только если вы еще не находитесь в сессии tmux, а шелл интерактивна.
Откройте файл ~/.bash_profile в своем любимом редакторе:
Добавьте в него следующие строки:
# If not inside a tmux session, and if the shell is interactive, then run the tmux menu script if [[ -z "$TMUX" ]] && [[ $- == *i* ]]; then ~/tmux_menu.sh fi
Сохраните файл и закройте его, нажав CTRL+O, а затем CTRL+X.
Шаг 4: Проверка настройки меню выбора сеанса Tmux
1. С локального компьютера войдите по SSH в удаленную систему, используя следующую команду: ssh user@remote_system.
Пример:
После успешного входа в систему вы будете автоматически подключены к сеансу Tmux “default“.
2. Войдя в удаленную систему, создайте несколько сеансов tmux, выполнив следующие команды:
Приведенные выше команды создадут две отсоединенные сессии Tmux, а именно tmux1 и tmux2.
Давайте проверим их, перечислив доступные сессии tmux:
Как видно, на моем удаленном сервере Debian 12 существует 3 сессии Tmux (по умолчанию, tmux1 и tmux2).
3. Теперь отсоединитесь от сеанса(ов) tmux (если вы присоединились к одному из них), используя Ctrl+b, а затем d.
Выйдите из текущей SSH-сессии.
4. Снова войдите по SSH в удаленную систему, и теперь в меню выбора сеанса tmux должно отображаться несколько сеансов.
5. Как видно из вывода, в меню выбора сеанса Tmux перечислены три существующих сеанса tmux.
Если вы хотите подключиться к любой из перечисленных сессий, просто введите имя сессии tmux и нажмите ENTER, и вы автоматически подключитесь к соответствующей сессии.
Если вы не хотите подключаться к существующей сессии, а хотите создать новую сессию, введите ‘new’, а затем имя новой сессии.
После ввода имени нового сеанса tmux нажмите клавишу ENTER, и вы будете присоединены к новому сеансу tmux.
Обратите внимание, что меню выбора сеанса tmux появится только в том случае, если активны два или более сеансов tmux.
Если активных сессий нет, то автоматически запускается новая сессия “default”.
Заключение
Каждый раз при такой настройкез, когда вы подключаетесь по SSH к удаленной системе, перед вами будет появляться меню выбора сеанса tmux.
Это позволяет лучше управлять сеансами tmux, обеспечивая более организованную и эффективную среду удаленной работы.
Теперь при следующем подключении к удаленной системе по SSH у вас будет возможность подключиться к существующей сессии tmux или создать новую, что поможет вам организовать свою работу и обеспечить легкий доступ к ней.