Улучшение входа по SSH с помощью меню выбора сеанса Tmux на Linux

Улучшение входа по 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 или создать новую, что поможет вам организовать свою работу и обеспечить легкий доступ к ней.


Источник


Report Page