Удобное удаленное управление консолью linux из-под Windows

Итак, друзья, некоторое подмножество нас (людей) так или иначе испытавает необходимость удаленного управления компьютером (как правило, сервером) на linux (способ может сработать и в BSD, и в Mac OS X, но я не пробовал) при помощи ssh. Другое подмножество использует Windows в качестве ОС на основной рабочей машине. К пересечению этих подмножеств обращена моя статья.

Полезности, ради которых затевается всё вселье:
1. Сохранение подключения при обрыве связи. Этот пункт для меня самый важный и сыграл решающую роль в том, чтобы взяться за настройку такой системы. Дело в том, что я живу в общежитии с очень-очень нестабильным интернетом, и обрывы связи у меня (в плохие дни) могут происходить поминутно. А putty требует последовательности действий, чтобы переподключиться каждый раз
2. Сохранение сессии, включая текущую директорию, историю команд и вывода. Зачастую, единственной задачей при подключении к серверу стоит: зайти в одну и ту же директорию и написать git pull. Чтобы каждый раз не вспоминать путь к этой директории, нужно сохранение сессии
3. Терминал поддерживает вкладки. Самое главное, что данный терминал можно использовать также и для cmd, и для PS, и для git bash консоли. Поэтому не придется держать несколько разных терминалов открытыми.
4. Плюсы tmux: многооконность в одной сессии и split

image

Рецепт успеха будет включать несколько пунктов:
  1. Терминал — ConEmu code.google.com/p/conemu-maximus5
  2. Менеджер сессий — tmux tmux.sourceforge.net
  3. Коннектор между клиентом и сервером — mosh mosh.mit.edu
  4. Запуск *nix приложений под windows — cygwin www.cygwin.com


Так же для проведения всех манипуляций нам также понадобится подобный набор софта:

  1. Putty или другой ssh клиент;
  2. Удаленный сервер (я использую 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-session
set-window-option -g mode-mouse on
set -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. Поддерживает кучу возможностей, таких как:

  1. вкладки и split-scren'ы;
  2. работа с консольными приложениями, использующими консольное API;
  3. гибкая настройка и управление;
  4. работа с цветами;
  5. … и многое другое, подробно про этот терминал можно почитать в статье разработчика.

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 <username>@<hostname> --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 <username>@<hostname> --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/
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 45

    +9
    После прочтения статьи возник один вопрос, «чего же не удобного в putty»?
      +7
      Я прочитав только заголовок сразу подумал об этом же. Просто тут так принято — решать простые задачи сложными способами.
        0
        Если интернет не стабильный постоянные разрывы связи в Putty уж очень надоедают.
          +1
          screen можно использовать
            0
            + можно написать скрипт, который будет автоматически восстанавливать сессию для заданного окна putty.
          +1
          Если надо вкладки есть begPutty habrahabr.ru/company/mailru/blog/206814/
          Ну на худой конец xshell, который для студентов бесплатный ;)
            +1
            Меня лично в putty не устраивает отсутствие табов и Quake вид консоли (что бы по CTRL + ~ что бы появлялась). На виндах обложился этой консолькой habrahabr.ru/post/164687/.
              0
              Посмотрите в сторону Superputty: https://code.google.com/p/superputty/

              SuperPutty is a Windows GUI Application that allows the PuTTY SSH Client to be opened in Tabs. Additionally there is support for SCP to transfer files.
                0
                Спасибо, но не очень нужно =) уже пятый год под ubuntu работаю, под Windows только игрушки запускаю, да браузер. Консоль в Windows нужна на всякий случай, что бы ради мелкой правки не грузиться в другую ось.
              +2
              Мне неудобна тем, что надо много возить мышкой.
                0
                Всё просто:
                1. Сохранение подключения при обрыве связи. Этот пункт для меня самый важный и сыграл решающую роль в том, чтобы взяться за настройку такой системы. Дело в том, что я живу в общежитии с очень-очень нестабильным интернетом, и обрывы связи у меня (в плохие дни) могут происходить поминутно. А putty требует последовательности действий, чтобы переподключиться каждый раз
                2. Сохранение сессии. Зачастую, единственной задачей при подключении к серверу стоит: зайти в одну и ту же директорию и написать git pull. Чтобы каждый раз не вспоминать путь к этой директории, нужно сохранение сессии
                3. Терминал поддерживает вкладки. Самое главное, что данный терминал можно использовать также и для cmd, и для PS, и для git bash консоли. Поэтому, не придется держать несколько разных терминалов открытыми.
                4. Плюсы tmux: многооконность в одной сессии и split
                Не спорю, часть из этого можно решить другими средствами
                p. s. Добавил в статью
                  0
                  А я вот не понял зачем mosh когда и так уже tmux используется?
                    0
                    Вот здесь про mosh
                    В кратце — mosh удерживает подключение при потери соединения, а tmux — позволяет сохранять контекст между подключения
                      0
                      т.е. в данном случае mosh просто-напросто позволяет не выбирать в консольке ssh server путём нажатия стрелочки наверх? так что ли?
                        0
                        грубо говоря — да. Но по сравнению с Putty — это прогресс
                          +1
                          Всё. Теперь я понял. Да, если сравнивать с PuTTY, то конечно это прогресс. Но зачем, когда в cygwin уже довольно давно поставляется нормальный эмулятор терминала, полноценный openssh client и вот это всё?..
                            0
                            Ну, вероятно, вы правы. Правда, нет там терминала с вкладками, как хотелось бы. Но и всё таки, не люблю тыкать стрелочку вверх и ждать переподключения, если интернет падает каждые три минуты (в прямом смысле)
                              0
                              Ну да — это раздражает. И тут mosh конечно поможет. Но для большинства пользователей это не очень актуально (ну для тех кто _РАБОТАЕТ_), понятно почему он не очень большое распространение получил на данный момент.
                                0
                                Есть консольные вкладки, urxvt с опцией tabbed.
                      0
                      а screen не пробовали использовать на сервере? :)
                        0
                        tmux — прокачанная альтернатива screen
                      +1
                      Putty хранит всё в реестре.
                      +1
                      Как альтернатива — chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo?utm_source=chrome-ntp-launcher

                      Приложение для хрома.
                      +3
                      А я вот мечтаю о нормальной консольной ssh, чтобы я пярм в FAR'е мог набрать ssh user@server и попасть на нужный мне сервер. Но увы, приходится держать рядом putty (
                        +2
                        так вот же в статье и предложили поставить ssh из cygwin, останется только убедиться что бинарь ssh.exe в %PATH%.
                          +1
                          Хм… надо попробовать. Только без ConEmu
                            0
                            ssh из cygwin

                            Страшный ужас, им только одну команду периодически запускать можно, работать в нем не получится, терминалы грубо говоря разные, короче из коробки не юзабельное совсем.
                            0
                            ssh в частности есть в дистрибутиве git (msysgit)… как и баш и суча других линуксовых консольных тулов… Можете его попробовать…
                            +1
                            Я один пользуюсь git bash как linux консолью на windows? И ssh есть и все основные команды. Единственное что неудобно, это горячие клавиши вставить/скопировать не такие как в linux.
                              0
                              Shift+ins работает для git bash.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                www.vandyke.com/products/securecrt/… а то я смотрю люди легких путей не ищут
                                  0
                                  оно платное же, не linux-way :)
                                  +1
                                  mRemoteNG.
                                    0
                                    Предпочитаю MobaXterm, т.к. у него есть поддержка X Server и все работает без необходимости устанавливать и настраивать VNC и тому подобного. Так у меня висит где-то Ubuntu Server с установленным ubuntu-desktop и могу удаленно запускать те же Firefox, Sublime… с сервера прямо из windows.
                                    +2
                                    Интересно, когда этот вреднючий совет (make install) исчезнет из рекомендаций по установке?
                                    git clone https://github.com/keithw/mosh.git
                                    cd mosh/
                                    sudo apt-get build-dep mosh
                                    ./autogen.sh && ./configure && make
                                    sudo make install
                                    

                                    Вот оно:
                                    sudo make install
                                    


                                    Уже даже пост есть на эту тему: Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

                                    Луше бы писали:
                                    make -j [количество ядер]
                                    

                                    или даже так:
                                    if filereadable('/proc/cpuinfo')
                                      let &makeprg = 'make -j'.(system('grep -c ^processor /proc/cpuinfo')+1)
                                    endif
                                    
                                      0
                                      … последнее я скопировал из своего vimrc, но думаю, идея понятна.
                                      –4
                                      если хочется извращений под виндой, можно поставить какой-нить линух под vmware
                                        0
                                        да, я думал, что можно запускать виртуалку в VirtualBox'е и потом оттуда че-то делать, но слишком долго и накладно выходит
                                        0
                                        Xshell с автокомандой screen -r -d при логине, делает абсолютно тоже самое о чем написано в статье.
                                          +1
                                          A mintty точно нужен? По-моему, лишний процесс висит. ConEmu нормально работает сразу с bash.
                                            +1
                                            А есть прекрасный форк putty называющийся KiTTY. Там есть автоматическое переподключение при дисконнекте и настраиваемая полупрозрачность окна.
                                              0
                                              Да эту kitty можно ещё и от реестра отучить! Этакая путти взявшаяся за ум… Спасибо.
                                              0
                                              Года два пытался сделать работу с удаленным Linux удобной из под Windows. Пробовал всё озвученное и в теме, и в комментариях… Но так по-настоящему ничем и не удовлетворился. А недавно сообразил поставить в VirtualBox'е старенькую 32-х битную компактную Ubuntu Lucid Lynx и, наконец, почти всё стало удобно :) Минус пока только один, почему-то не работает переключение раскладок по CapsLock, хост не передаёт корректно сканкод (на хосте раскладка тоже по Caps Lock). Но это малая плата за реальное удобство.

                                              Да, забыл уточнить — конфигурация двухмониторная. Это и лишние проблемы с чисто Windows решениям порождало, и помогает с VirtualBox вариантом — вторичный монитор отдан целиком на виртуальную машину в полном экране.

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

                                              Самое читаемое