Упрощение работы с серверами Linux: Как использование WSL, Windows Terminal и Zsh сделает эмулятор терминала более дружелюбным

30 4

Эта статья имеет дискуссионный характер и основана на личном опыте автора. В ней описывается предпочтительный способ взаимодействия с удаленными серверами на Linux, используя инструменты WSL, Windows Terminal и Zsh. Если вы уже знакомы с этими инструментами и предпочитаете использовать свои собственные подходы, вы можете адаптировать предложенные рекомендации или добавить свои собственные наработки.

Однако, если вы новичок в этой области или ищете более удобный способ работы с серверами Linux на компьютерах под управлением Windows, я приглашаю вас ознакомиться с предлагаемым подходом. В статье будет рассмотрена установка и настройка указанных инструментов, а также рассмотрены преимущества их использования при подготовке системы к установке Directum RX.

Вступление

Поскольку большинство из нас пользуется Windows, в том случае, когда нам необходимо развернуть Directum RX на сервере под управлением Linux, мы сталкиваемся с вопросом подключения к такому серверу и работе в консоли.
Администратор выдает ip адрес сервера, логин и пароль, часто - vpn, иногда просит отправить ssh ключ.
Чаще всего мы используем Xshell или PyTTY, но я думаю, что нашел более простой, красивый, и что важнее удобный способ взаимодействия с серверами Linux, с беспарольным подключением, автодополнением, подсветкой синтаксиса и возможностью подключаться к нескольким серверам и запускать несколько консольных утилит на одном и том же сервере одновременно.
Windows Terminal позволит запускать Linux прямо в консоли, дает возможность разделять экран и использовать вкладки.
WSL + Ubuntu позволяет подключаться к серверу по ssh, не выходя из терминала.
Oh-My-Zsh помогает сделать консоль более информативной и удобной, добавляя несколько функций, таких как автодополнение, подсветка синтаксиса, исправление ошибок ввода, распаковка zip архивов.

Кратко

В процессе установки и настройки я использую Windows Terminal, WSL с дистрибутивом Ubuntu, а также настраиваю Zsh и oh-my-zsh с плагинами git, extract, zsh-autosuggestions и zsh-syntax-highlighting как на WSL, так и на удаленном сервере. Для иллюстрации этого подхода, мы также рассмотрим установку определенной версии Docker и PostgreSQL на сервере.

Подробно

Чтобы сделать работу в консоли более удобной, предлагаю использовать Windows Terminal. Вы можете скачать его из Windows Store или с GitHub по следующему адресу: microsoft / terminal. Настройку Windows Terminal мы рассмотрим позже, а пока давайте запустим его (откроется окно PowerShell, так как этот профиль установлен по умолчанию) и установим Windows Subsystem for Linux (WSL) для установки Ubuntu, с которым мы будем работать дальше. Для этого выполните команду

wsl --install

Эта команда включит Hyper-V, если он еще не включен, и установит WSL и Ubuntu как дистрибутив по умолчанию, интегрированный в вашу операционную систему. Если по какой-то причине Ubuntu не скачалась, вы можете установить ее из Microsoft Store.




После установки дистрибутива Ubuntu в Windows Terminal появится соответствующий профиль, и теперь мы можем запустить Ubuntu просто щелкнув на него. 


Ubuntu попросит вас ввести имя пользователя и пароль. При вводе пароля в Linux символы не отображаются, поэтому не пугайтесь, если не видите своего ввода. Также будьте внимательны к раскладке клавиатуры и регистру.
Готово? Отлично! Теперь вы видите стандартное приглашение в виде Ubuntu Server, которое вы также увидите на удаленном сервере. Предлагаю настроить этот интерфейс.

Шаг 1: Настроим цветовую схему и шрифт. 

Давайте беречь наше зрение. Для этого все по той же стрелочке вниз в Windows Terminal перейдем в параметры для профиля Ubuntu, выберем шрифт, его размер и  цветовую палитру. В качестве шрифта я использую MesloLGS NF (ссылка на гитхаб), и я буду рекомендовать его (далее в статье этот шрифт нам будет полезен), ну а все остальное настраивайте исходя из Ваших предпочтений и комфорта.

Шаг 2: Делаем эмулятор терминала нашим другом.

Вся "фишка" Linux и эмулятора терминала в частности, кроме встроенных в ядро Linux драйверов, заключается в возможностях масштабирования - благодаря тому, что последовательность действий заключается в вводе определенных команд, нам достаточно один раз написать все команды, сохранить их, а потом делать Ctrl+C - Ctrl+V. Давайте так и поступим.

Для того, чтобы сделать интерфейс эмулятора терминала более дружелюбным, выполним следующую последовательность команд:
Обновим нашу систему:

sudo apt update && apt upgrade

Установим необходимые утилиты:

sudo apt install git curl wget openssh-server gnupg ca-certificates vim apt-transport-https


Как видите, нужные программы перечисляются через пробел. В результате выполнения нашего запроса система попросит нас ввести пароль и спросит, действительно ли мы хотим установить все это. Вводим "Y". Так же вы можете избежать этого вопроса, добавив в конец команды "-y".
Обновляем локальный индекс пакетов снова:

sudo apt update

и устанавливаем oh-my-zsh:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

В результате запустится скрипт, который спросит, хотим ли мы использовать zsh по умолчанию. Соглашаемся вводом "Y"
Скачиваем тему и дополнения для zsh, которые будем использовать:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

zsh - это командная оболочка, которая заменяет стандартный для большинства Linux дистрибутивов bash, а oh-my-zsh - это менеджер плагинов для него.
Откроем и отредактируем файл конфигурации, который находится в вашей домашней папке:

sudo vim /home/ваше_имя_пользователя/.zshrc

Вы можете просто скопировать эту команду в консоль, или ввести команду вручную. Когда будете вводить путь, достаточно ввести его начало и нажать TAB, после чего система подставит нам первое по алфавиту в списке значение из существующих. Двойное нажатие TAB выведет весь список.
Заодно таким образом можно убедиться, что файл .zshrc существует. Если нет, перезайдите в Ubuntu.
Откроется консольный текстовый редактор vim, которым пугают людей в интернетах, но мы с ним достаточно быстро подружимся.
Если все сделано верно, вы увидите настройки zsh 


Стрелочками листаем до строчки

ZSH_THEME

с помощью клавиши Del удаляем все и правой кнопкой мышки вставляем эту строчку

 ZSH_THEME="powerlevel10k/powerlevel10k"

 листаем ниже до строчки

plugins=(git)

нажимаем клавишу "I" и попадаем в режим редактирования текста, где работают привычные правила.
редактируем строчку так, чтобы вышло

plugins=(git extract zsh-autosuggestions zsh-syntax-highlighting)

Опционально вы можете добавить плагин thefuck, если вы часто забываете написать перед командой sudo
Сделать это можно, добавив слово thefuck в список плагинов, но обратите внимание, что zsh-autosuggestions и zsh-syntax-highlighting должны стоять в конце списка для корректной работы. Для thefuck, как и для extract, ничего скачивать не нужно, подробнее о них можно почитать тут: extract, thefuck.
Чтобы выйти из режима редактирования в vim. достаточно нажать ESС, далее сохраним файл, введя команду:

:x

Чтобы выйти из vim без сохранения, используйте

:q!

Перезайдем в систему, выполнив exit и открыв Ubuntu снова.
запустится скрипт установки темы powerlevel10k, просто следуйте инструкциям и выбирайте то, что нравится. Это вкусовщина, но у меня получается так 
В результате получаем достаточно удобный терминал, в котором мы видим, в какой папке находимся и под каким пользователем, красным отображаются неверные команды, зеленым - верные, более темный шрифт нам подсказывает, что писать, стрелка влево завершает автокомплит, а клавиша TAB теперь нам экономит кучу времени, показывая, что мы можем ввести.

Если вы, как и я, хотите настроить то же самое для суперпользователя и не вводить sudo каждый раз, выполните следующие команды:
Авторизоваться как суперпользователь:

sudo su

Перейти в его домашнюю папку

cd

Снова скачайте тему, дополнения и отредактируйте .zshrc командой vim .zshrc - файл конфигурации свой для каждого пользователя.
Для применения изменений разлогиньтесь и авторизуйтесь снова:

exit
sudo su
  • Шаг 3: Устанавливаем беспарольный доступ на сервер.

Итак, у нас есть удобная консоль, vpn, адрес сервера, логин и пароль. SSH не заменяет vpn, так что убедитесь, что он у вас включен перед выполнением операций.
Давайте создадим ключ ssh, который будет пускать нас на этот сервер без пароля:

ssh-copy-id username@server_ip_address

Замените username на имя пользователя на сервере, а server_ip_address на фактический IP-адрес вашего сервера.
При выполнении этой команды вам может быть запрошен пароль пользователя на сервере.
Если операция успешна, ваш публичный ключ будет скопирован на сервер в файл ~/.ssh/authorized_keys для указанного пользователя. Это позволит вам аутентифицироваться на сервере с использованием соответствующего приватного ключа.
Теперь подключаемся к серверу:

ssh username@server_ip_address

Если все сделано верно, вы подключитесь к удаленному серверу Linux, о чем вам скажут следующие строки 
Повторим для нашего пользователя на сервере, получив удобный для работы терминал, а заодно воспользуемся всеми преимуществами связки всех этих программ.
В зависимости от дистрибутива Linux команду apt нужно будет заменить на 
apt-get для Alt Linux и Astra Linux 
yum для Рэд ОC

Демонстрация и совсем немного инструкций

Скачаем Directum RX и подготовим наш сервер к его установке:
Скачиваем необходимую версию с саппорта и с помощью проводника Windows копируем архив в \\wsl.localhost\Ubuntu\home\ваше_имя_пользователя (или можно воспользоваться проводником, заглянув в папку Linux в левом меню)
Щелкаем правой кнопкой мышки по окну с ubuntu и выбираем "Разделить вкладку" пару раз, это создаст нам дополнительные удобные области работы. По ним можно перемещаться щелчком мыши или комбинацией клавиш Alt + стрелка, изменять размер окон можно комбинацией клавиш Shift+ Alt + стрелка.


В окне, которое авторизовано на сервере (благодаря zsh вы можете проверить, где вы находитесь, на моем скриншоте это замытый участок возле часов, у вас там будет username@address) проверьте, что у нас достаточно места на диске командой

df 

(смотрите на "/").
В другом окне вводим команду подключения  протоколу sftp:

sftp username@server_ip_address

sftp авторизуется по ssh и мы можем копировать архив DirectumRX.zip на удаленный сервер командой

put /local/directory/DirectumRX.zip /remote/directory/DirectumRX.zip

Если архив находится в домашней папке, или вы хотите положить его в домашнюю папку на сервере, путь можно не писать, например эта команда

put DirectumRX.zip 

скопирует архив DirectumRX.zip из /home/ваше_имя_пользователя/ вашего компьютера на /home/ваше_имя_пользователя/ удаленного сервера.
Аналогично можно пользоваться командой get (или get -r, если мы хотим скачать не файл, а папку).
Проверить, что файл на месте, можно в окне, которое авторизовано на сервере, перейдя в нужный каталог командой 

cd /путь/до/файла/ 

и отобразив все файлы и папки командой

ls -la

Воспользуемся преимуществами zsh и разархивируем файл:

extract DirectumRX.zip

В результате этой команды у нас появится новая папка DirectumRX с распакованным архивом. Перейдем внутрь командой:

cd DirectumRX

и распакуем нужное:

extract Имя_архива.tar.xvf

Удалить лишнее можно командой 

rm -rf имя_файла

Теперь эту папку можно скопировать в более удобное место, я использую /srv:

cp -r /home/ваше_имя_пользователя/DirectumRX /srv

или переместим:

mv /home/ваше_имя_пользователя/DirectumRX /srv

Для установки DirectumRX на Linux нам требуется PosgreSQL и Docker, давайте скачаем нужные версии.


Docker

для Ubuntu, Alt Linux и Astra Linux воспользуемся скриптом из документации:

#Run the following command to uninstall all conflicting packages:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
    
#Update the apt package index and install packages to allow apt to use a repository over HTTPS:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

#Add Docker’s official GPG key:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

#Use the following command to set up the repository:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \

sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


#Update the apt package index:
sudo apt-get update

#List the available versions:
apt-cache madison docker-ce | awk '{ print $3 }'

Обратите внимание, что строки, которые начинаются с # игнорируются.
После выполнения данных команд мы должны увидеть список доступных для скачивания версий докера, установим ее таким образом:

VERSION_STRING=5:24.0.0-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

 Для РЭД ОС воспользуемся командами для того, чтобы показать список доступных версий

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce --showduplicates | sort -r

и установим докер:

VERSION_STRING=5:24.0.0-1~ubuntu.22.04~jammy
sudo yum install -y docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

PostgreSQL

для Ubuntu, Astra Linux и Alt Linux, покажем доступные версии:

# Create the file repository configuration
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc &>/dev/null

# Update list of available packages
sudo apt update
sudo apt-cache madison postgresql

и установим 

sudo apt-get install postgresql-какая нам нужна-версия


Для РЭД ОС:

# Import the repository signing key
sudo rpm --import https://www.postgresql.org/media/keys/ACCC4CF8.asc

# Create the file repository configuration
sudo sh -c 'cat <<EOF > /etc/yum.repos.d/pgdg.repo
[pgdg$(rpm -E %dist)]
name=PostgreSQL $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/$(rpm -E %rhel)/$(rpm -E %rhel)/$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-$(rpm -E %rhel)
EOF'

# Update list of available packages
sudo yum update

# List all available PostgreSQL versions
sudo yum list postgresql*

и установим 

sudo yum update
sudo yum install postgresql-server-какая-там-версия-нам нужна.

Не забудьте отредактировать /etc/postgresql/версия/main/postgresql.conf и pg_hba.conf в той же папке,
Откройте postgresql.conf с помощью vim:

sudo vim /etc/postgresql/версия/main/postgresql.conf

пролистайте до этого вывода и настройте параметры

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)

для pg_hba.conf нужно по аналогии с существующими записями добавить своего пользователя после того, как вы его создадите, например

host    all             rxadmin         0.0.0.0/0               trust

Вывод

Настройка эмулятора терминала в Windows Terminal для профиля Ubuntu является важным шагом в создании комфортного и продуктивного рабочего окружения. Правильная настройка цветовой схемы, шрифта и установка необходимых утилит позволяют не только беречь зрение, но и существенно улучшить опыт работы.

Благодаря использованию zsh вместо стандартной оболочки bash и установке oh-my-zsh, мы получаем мощный инструмент с поддержкой тем и плагинов. Тема powerlevel10k добавляет стильный внешний вид и информативность к терминалу, а плагины, такие как zsh-syntax-highlighting и zsh-autosuggestions, облегчают ввод команд и предоставляют полезные подсказки.

В результате всех этих шагов, вы создали оптимизированное рабочее окружение, которое поможет вам повысить производительность, удобство и эффективность вашей работы с Ubuntu в Windows Terminal.

Каждый из этих инструментов универсален и может быть использован далеко не только для установки DirectumRX, а oh-my-zsh и Windows Terminal имеют огромное количество плагинов, которые делают работу с ними проще и удобнее конкретно для вас.

Настраивайте свое рабочее окружение с умом и не бойтесь экспериментировать с различными настройками, чтобы найти наиболее подходящие для ваших потребностей. Удачи в работе и приглашаю в комментарии с вопросами, критикой и дополнениями к статье.

Антон Максунов

Могу посоветовать MobaXterm. Вкладки для разных сеансов, авторизация через ssh, разделение экранов, одновременное подключение по ssh, rdp, telnet, ftp, s3 и куча прочих. Есть бесплатная версия, платная (разово, без подписки). Естественно умеет сохранять сессии, раскрашивать вкладки цветами, настраивать терминал. При этом на подключаемой машине ничего ставить не нужно.

Андрей Петров

Антон, нужно, если хотим удобный автокомплит - придется ставить zsh на подключаемой машине. Вкладки есть, а вот тайлинг, насколько я увидел, отсутствует - для меня гораздо удобнее смотреть все, что нужно, на одном экране. Хотя, безусловно, инструмент хороший, лично мне удобнее пользоваться wsl

Антон Максунов

Андрей, тайлинг это вот это?

Андрей Петров

Антон, да, это вот это, спасибо, что подсказали)

Авторизуйтесь, чтобы написать комментарий