Улучшение входа по SSH с помощью меню выбора сеанса Tmux на Linux
Life-Hack [Жизнь-Взлом]/ХакингВ этой статье мы покажем, как настроить меню выбора сеанса tmux, которое активируется при SSH-входе в удаленную Linux-систему.
В этом меню будут перечислены существующие сессии 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.
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: Сделаем скрипт исполняемым
Предоставьте права на выполнение сценария с помощью следующей команды:
chmod +x ~/tmux_menu.sh
Шаг 3. Обновление профиля Bash
Теперь обновите файл ~/.bash_profile на удаленной системе, чтобы вызывать этот скрипт при каждом входе в систему по SSH, но только если вы еще не находитесь в сессии tmux, а шелл интерактивна.
Откройте файл ~/.bash_profile в своем любимом редакторе:
nano ~/.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.
Пример:
ssh ostechnix@192.168.1.20
После успешного входа в систему вы будете автоматически подключены к сеансу Tmux “default“.
2. Войдя в удаленную систему, создайте несколько сеансов tmux, выполнив следующие команды:
tmux new -s tmux1 -d tmux new -s tmux2 -d
Приведенные выше команды создадут две отсоединенные сессии Tmux, а именно tmux1 и tmux2.
Давайте проверим их, перечислив доступные сессии tmux:
tmux ls default: 1 windows (created Mon Oct 2 13:31:25 2023) tmux1: 1 windows (created Mon Oct 2 13:32:28 2023) tmux2: 1 windows (created Mon Oct 2 13:32:32 2023)
Как видно, на моем удаленном сервере Debian 12 существует 3 сессии Tmux (по умолчанию, tmux1 и tmux2).
3. Теперь отсоединитесь от сеанса(ов) tmux (если вы присоединились к одному из них), используя Ctrl+b, а затем d.
Выйдите из текущей SSH-сессии.
4. Снова войдите по SSH в удаленную систему, и теперь в меню выбора сеанса tmux должно отображаться несколько сеансов.
ssh itsecforu@192.168.1.20 Linux debian12 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.38-1 (2023-07-14) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Oct 2 13:44:33 2023 from 192.168.1.101 Existing tmux sessions: default tmux1 tmux2 Enter the name of the session you want to attach to, or 'new' to create a new session:
5. Как видно из вывода, в меню выбора сеанса Tmux перечислены три существующих сеанса tmux.
Если вы хотите подключиться к любой из перечисленных сессий, просто введите имя сессии tmux и нажмите ENTER, и вы автоматически подключитесь к соответствующей сессии.
Если вы не хотите подключаться к существующей сессии, а хотите создать новую сессию, введите ‘new’, а затем имя новой сессии.
После ввода имени нового сеанса tmux нажмите клавишу ENTER, и вы будете присоединены к новому сеансу tmux.
Обратите внимание, что меню выбора сеанса tmux появится только в том случае, если активны два или более сеансов tmux.
Если активных сессий нет, то автоматически запускается новая сессия “default”.
Заключение
Каждый раз при такой настройкез, когда вы подключаетесь по SSH к удаленной системе, перед вами будет появляться меню выбора сеанса tmux.
Это позволяет лучше управлять сеансами tmux, обеспечивая более организованную и эффективную среду удаленной работы.
Теперь при следующем подключении к удаленной системе по SSH у вас будет возможность подключиться к существующей сессии tmux или создать новую, что поможет вам организовать свою работу и обеспечить легкий доступ к ней.