Удаленная командная строка linux

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

Или же собираем из исходников:

git clone git://git.code.sf.net/p/tmux/tmux-code tmux cd tmux sh autogen.sh ./configure && make 

Очень хороший способ запустить tmux:
tmux attach || tmux new — делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый.

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

Читайте также:  Before you install linux

В одной сессии может быть сколько угодно окошек:
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, добавляем следующее:

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

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

Вот как выглядит задача запуска cygwin:

image

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

C:\cool\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico - 

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

У меня команда выглядит так:

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.

Читайте также:  Connect to file server linux

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

image

image

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

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

UPD 2022: хоть статье и много лет, и я уже давно пользуюсь linux — трюк из mosh+tmux все еще актуален 🙂

Источник

How to Execute Linux Commands on Remote System over SSH

Run-Linux-Commands-Remote-systems-Over-SSH

Many times we need to work with remote Linux systems. We login to the remote host, perform work and exit that session. Can we perform all these actions from local machine ? Yes, it’s possible and this tutorial demonstrates it with exhaustive examples.

Command execution over SSH

SSH allows us to execute command on remote machine without logging into that machine. In this tutorial we’ll discuss various ways to achieve this.

Execute single command

Let us execute uname command over SSH.

If you observe above command, it is similar to regular SSH command with minor difference. We have appended command to be executed (highlighted in red color).

When we execute this command. It’ll generate below output:

Execute multiple commands

Using this technique, we can execute multiple commands using single SSH session. We just need to separate commands with semicolon (;).

As expected, these commands will generate below output:

Linux linux-server Thu Mar 1 15:47:59 IST 2018
Execute command with elevated privileges

Sometimes we need to execute command with elevated privileges, in that case we can use it with sudo.

Note that we have used ‘-t‘ option with SSH, which allows pseudo-terminal allocation. sudo command requires interactive terminal hence this option is necessary.

Execute script

Remote execution is not only limited to the commands; we can even execute script over SSH. We just have to provide absolute path of local script to SSH command.

Let us create a simple shell script with following contents and name it as system-info.sh

Make script executable and run it on remote server as follows:

As some of you might have guessed, it will generate below output:

Variable expansion problem

If we split commands into multiple lines, then variable expansion will not work. Let us see it with simple example:

Читайте также:  Install git server on linux

When we execute above command, we can observe that variable is not getting expanded.

To resolve this issue, we need to use -c option of shell. In our case we’ll use it with bash as follows:

Configure password-less SSH session

By default, SSH will ask for password authentication each time. This is enforced for security reasons. However, sometimes it is annoying. To overcome this, we can use public-private key authentication mechanism.

It can be configured using following steps:

1) Generate public-private key pair

SSH provides ssh-keygen utility which can be used to generate key pairs on local machine.

$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/linuxtechi/.ssh/id_rsa): #press enter Enter passphrase (empty for no passphrase): #press enter Enter same passphrase again: #press enter Your identification has been saved in /home/linuxtechi/.ssh/id_rsa. Your public key has been saved in /home/linuxtechi/.ssh/id_rsa.pub.

Above output shows that generated key pairs are stored under ~/.ssh directory.

2) Add public key to ~/.ssh/authorized_keys file on remote host

Simple way to do this is, using ssh-copy-id command.

  • -i option indicates identity file
  • ~/.ssh/id_rsa.pub is identity file
  • remaining text is remote user and remote server IP

NOTE: Never share your private key with anyone.

3) That’s it. Isn’t it so simple? Now we can execute command over SSH without entering password. Let us verify this.

Limitation of public-private key authentication

Thought public-private key authentication makes our life easier, it is not perfect. Its major downside is; we cannot automate it, because user interaction is required first time. Remember . we have provided password to ssh-copy-id command.

There is no need to get panic, this is not end of world. In next section we’ll discuss approach which eliminates this limitation.

sshpass utility

To overcome above limitation, we can use sshpass utility. It provides non-interactive way to authenticate SSH session. This section discusses various ways of it.

Installation of sshpass

sshpass utility is part of Ubuntu’s official repository. We can install it using following commands:

$ sudo apt-get update $ sudo apt-get install sshpass

sshpass can accept password – as an argument, read it from file or via environment variable. Let us discuss all these approaches.

1) Password as an argument

We can provide, password as an argument using –p option:

sshpass can read password from regular file using -f option:

3) Password from environment variable

In addition to this, we can provide password from environment variable using -e option:

Conclusion

This tutorial shows various tricks and tips on remote command execution over SSH. Once you get the understanding of these tricks it will make your life much easier and definitely improve your productivity.

Read Also : 9 ‘diff’ Command Examples in Linux

Источник

Оцените статью
Adblock
detector