xaker

Комфортный шелл — это как?

  • вторник, 28 октября 2014 г. в 02:11:35

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

Требования

Что меня раздражает больше всего, так это что после любого обрыва соединения или выключения (фактически засыпания) ноутбука нужно заново подключаться (хорошо, если с той стороны есть screen). Поэтому первое требование простое — нужно, чтобы шелл работал без потери контекста после перезагрузки или восстановления из сна, при изменении маршрутизации (например, переключение между Wi-Fi-сетями или после подключения к VPN) или в случае каких-то временных проблем с сетью. Дальше требования попроще: сохранение цветов, нормальная работа copy-paste, поддержка цветовых схем, беспроблемная работа скроллинга. Мне кажется, не так много я и хочу.

Конфигурация

90% времени я работаю под OS X, поэтому буду рассказывать о своем конфиге. В принципе, от системы к системе ничего не меняется, кроме непосредственно терминала. На серверах в основном у меня Debian и Ubuntu, но это вообще не имеет значения. Итак, конфиг, с которым в последнее время я живу, — iTerm2 + mosh + tmux.

iTerm2

Собственно, iTerm — это один из самых известных терминалов под OS X. Он уже из коробки неплохо приготовлен, но единственное — нужно не забыть включить цветовые схемы и поддержку скроллинга. Для этого в настройках надо выставить Terminal Type в xterm-256color и убедиться, что опция Enable xterm mouse reporting активирована. Вообще, рекомендую познакомиться со всеми фишками программы (разделение на панели, autocomplete, поддержка Growl и прочее) — я открыл для себя много полезного.

tmux

Менеджер сессий, без него никак. Если ты когда-то работал со screen, то tmux — это тот же screen, но на стероидах. Правда, из всех его функций я использую только возможность сохранить мою сессию на удаленном сервере. Идея простая: когда я подключаюсь, я всегда начинаю с того места, где закончил, — например, работе над каким-нибудь скриптом в Vim’е. Состояние сохраняется. Да, screen делает то же самое, но давно не развивается — поэтому tmux выигрывает во множестве мелочей.

Tmux без проблем устанавливается на удаленном сервере, в конфиг стоит добавить что-то вроде:

  new-session
  set-window-option -g mode-mouse on
  set -g history-limit 25000

Объясняю, в чем смысл. Если активной сессии нет и при этом выполняется попытка подключения (attack), то tmux создаст новую сессию — это делает первая строчка конфига. Вторая включает поддержку мыши. Третья определяет размер истории.

Шпаргалка по tmux

Шпаргалка по tmux

mosh

Мы уже как-то писали про mosh. Это очень полезная утилита, которая выступает чем-то вроде коннектора между сервером и клиентом. Даже если соединение обрывается (а обрывается оно постоянно банально из-за перемещения из дома на работу, я работаю на ноуте), она терпеливо подождет, пока все станет ОК, и без всяких проблем позволит вернуться к работе. «Ни единого обрыва», как в случае с SSH :).

Нужную версию лучше взять из Git’а, тогда она стопроцентно будет поддерживать мышь и скроллинг:

  git clone https://github.com/keithw/mosh.git
  cd mosh/
  sudo apt-get build-dep mosh
  ./autogen.sh && ./configure && make
  sudo make install

Соответственно, клиентская часть в OS X устанавливается через HomeBrew:

brew install --HEAD mobile-shell

Mosh — SSH без обрывов

Mosh — SSH без обрывов

Как этим пользоваться

На выходе все очень просто. Мне достаточно набрать команду

mosh HOST -- tmux a

и я всегда получаю доступ к шеллу в том месте, где я закончил. Tmux сохраняет сессию на удаленном хосте, mesh позволяет не переподключаться сто раз на дню, а iTerm — комфортно работать с шеллом. Можно, конечно прокачивать систему еще дальше и, к примеру, установить на удаленном хосте zsh, но это уже детали.