[Из песочницы] Удобное удаленное управление консолью linux из-под Windows

Итак, друзья, некоторое подмножество нас (людей) так или иначе испытавает необходимость удаленного управления компьютером (как правило, сервера) на linux (способ может сработать и в BSD, и в Mac OS X, но я не пробовал) при помощи ssh. Другое подмножество использует Windows в качестве ОС на основной рабочей машине. К пересечению этих подмножеств обращена моя статья.UPD: У меня часто спрашивают, зачем же всё, описанное в статье, надо.Всё просто:1. Сохранение подключения при обрыве связи. Этот пункт для меня самый важный и сыграл решающую роль в том, чтобы взяться за настройку такой системы. Дело в том, что я живу в общежитии с очень-очень нестабильным интернетом, и обрывы связи у меня (в плохие дни) могут происходить поминутно. А putty требует последовательности действий, чтобы переподключиться каждый раз2. Сохранение сессии. Зачастую, единственной задачей при подключении к серверу стоит: зайти в одну и ту же директорию и написать git pull. Чтобы каждый раз не вспоминать путь к этой директории, нужно сохранение сессии3. Терминал поддерживает вкладки. Самое главное, что данный терминал можно использовать также и для cmd, и для PS, и для git bash консоли. Поэтому, не придется держать несколько разных терминалов открытыми.4. Плюсы tmux: многооконность в одной сессии и splitНе спорю, часть из этого можно решить другими средствамиКак же получить комфортный remote access к bash из-под Windows?

imageРецепт успеха будет включать несколько пунктов:

Терминал — ConEmu code.google.com/p/conemu-maximus5; Менеджер сессий — tmux tmux.sourceforge.net; Коннектор между клиентом и сервером — mosh mosh.mit.edu; Запуск *nix приложений под windows — cygwin www.cygwin.com; Так же для проведения всех манипуляций нам также понадобится подобный набор софта:

Putty или другой ssh клиент; Удаленный сервер (я использую ubuntu на aws, хотя это не имеет существенного значения). Что мы получим в итоге? В итоге мы получим терминал с возможностью доступа к удаленной консоли. При обрыве соединения (обрыве интернета, смене ip-адреса, изменении маршрутизации, неустойчивом соединении, засыпании ноутбука etc) не придется переподключаться, а при переподключении не будет теряться контекст работы.Теперь поехали подробно.

Конфигурация Настраивать нашу систему мы будем поэтапно, начнем с удаленного сервера. Подключаемся к нему по ssh и ставим…tmux Tmux — менеджер сессий, как говорится, screen на стероидах. К моему дистрибутиву tmux уже шел в комплекте, а если нет, то ставим его: sudo apt-get install tmux Или же собираем из исходников: git clone git://git.code.sf.net/p/tmux/tmux-code tmux cd tmux sh autogen.sh ./configure && make Краткая шпаргалка по tmux Скопировано из http://habrahabr.ru/post/126996/Очень хороший способ запустить tmux: tmux attach || tmux new — делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый.

После этого вы попадаете в полноценную консоль.Ctrl+b d — отключиться. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)

В одной сессии может быть сколько угодно окошек: Ctrl+b c — создать окошко; Ctrl+b 0…9 — перейти в такое-то окошко; Ctrl+b p — перейти в предыдущее окошко; Ctrl+b n — перейти в следующее окошко; Ctrl+b l — перейти в предыдущее активное окошко (из которого вы переключились в текущее); Ctrl+b & — закрыть окошко (а можно просто набрать exit в терминале).

В одном окошке может быть много панелей: Ctrl+b % — разделить текущую панель на две, по вертикали; Ctrl+b » — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2); Ctrl+b →←↑↓ — переходить между панелями; Ctrl+b x — закрыть панель (а можно просто набрать exit в терминале).

Недостаток — непривычным становится скроллинг: Ctrl+b PgUp — вход в «режим копирования», после чего: PgUp, PgDown — скроллинг; q — выход из «режима копирования».

В конфиг, который находится в ~/.tmux.conf, добавляем следующее:

new-sessionset-window-option -g mode-mouse onset -g history-limit 25000

В первой строчке значится, что при попытке подключения, если нет активной сессии, создаётся новая. Вторая строчка включает поддержку мыши, а третья задаёт размер истории.

mosh Mosh в нашей связке — это система, которая обеспечивает бесперебойность соединения. При обрыве соединения программа ждет, пока connectivity восстановится и продолжает работу с места остановки. Так же помогает и при медленном/нестабильном соединении.Устанавливаем из исходников, чтобы получить версию, которая поддерживает все нужные фичи:

git clone https://github.com/keithw/mosh.git cd mosh/ sudo apt-get build-dep mosh ./autogen.sh && ./configure && make sudo make install Специальная конфигурация не требуется.

Cygwin Теперь переходим к клиентской части.Cygwin — альтернативная реализация linux api, которая позволяет использовать linux утилиты из-под windows. Ставится с официального сайта (https://cygwin.com/install.html). У меня стоит версия x86_64. Скачиваем, ставим.При выборе пакетов (помимо основных) нужно отметить mosh и ssh:

image

Конфигурация не требуется.

ConEmu Последний пункт — ConEmu. Замечательный терминал под windows. Поддерживает кучу возможностей, таких как: вкладки и split-scren’ы; работа с консольными приложениями, использующими консольное API; гибкая настройка и управление; работа с цветами; … и многое другое, подробно про этот терминал можно почитать в статье разработчика. ConEmu ставится с официального сайта. Скачиваем, ставим (или распаковываем), запускаем. При первом запуске оставляем галочки стоять на местах. Открываем настройки по Win+Alt+P. Нас интересует пункт Tasks.Вот как выглядит задача запуска cygwin:

image

Создайте такой пункт у себя, при этом, вам, возможно, придется заменить путь на ваш путь установки:

C:\cool\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico - Сохраняем, закрываем настройки, выбираем наш cygwin в выпадающем меню рядом с плюсиком в правом верхнем углу.Теперь нам нужно добиться подключения по ssh к нашему серверу.У меня команда выглядит так:

ssh -i key2014.pem -p 22 key2014.pem — мой ssh приватный ключ доступа к инстансу в aws. Возможно, его стоит скопировать с диска windows (который монтируется в /cygdrive) в корневую папку.Следующий этап — подключение через Mosh:

mosh @ --ssh=\«ssh -i key2014.pem -p 22\» -p 55505 — tmux a 55505 — UDP порт, который я предварительно открыл для входящих соединений в правилах безопасности в админке aws. Теперь все соединения будут вестись только через него (помимо начального установления связи — оно идёт через 22 порт).tmux a — команда, которая выполняется при подключении к серверу (attach к работающей сессии tmux).Проверяем. Работает? Великолепно! Последняя задача — создать новый Task в ConEmu.image

Конкретно:

C:\cool\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /bin/bash -l -c «mosh @ --ssh=\«ssh -i key2014.pem -p 22\» -p 55505 — tmux a» Думаю, всё понятно. Обратите внимание на слеши перед кавычками. Они отличают степень вложенности кавычек.Ну вот, пожалуй и всё. Теперь, когда мы хотим подключиться к серверу, запускаем ConEmu, тыкаем по стрелочке рядом с плюсиком и выбираем наш Task.

Дополнение Еще одно упрощение, которое я использую — я добавил все необходимые мне Task’и для вызова напрямую из Totcmd: image

Обычная cmd:

image

Подключение к aws:

image

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

P.P. S.Данная статья является компиляцией других статей, взятых из разных мест и собственных наработок. Единственная статья, которую я помню — http://xakep.ru/komfort-shell/

© Habrahabr.ru