SSH — настройка доступа к серверу, команды и подключение без паролей. Хостинг с SSH - почему это полезно? Подключение к серверу по ssh linux

Решил написать пару шеловских скриптов для автоматизации своих задач на хостинге. Встал вопрос как проверить их работоспособность. Было принято решение запускать их выполнение в командной строке. Для этого я использовал подключение по ssh. Как я его настроил опишу ниже.

И так приступим. Разберёмся сначала что такое ssh. SSH(Secure Shell - защищённая оболочка) - один из протоколов сети. Многие провайдеры (включая и моего) используют протокол для разрешения работы с удалённым компьютером (каталогом на хостинге) через командную строку. Используя командную строку можно полностью управлять удалённым компьютером, но для этого надо знать специальные команды и это тема отдельной статьи. Из всего выше сказанного стоит только запомнить что ssh сервер использует по умолчанию 22 порт. Это нам понадобится для настройки ssh клиента.

PuTTY

Один из самых распространённых ssh клиентов под Windows является программа PuTTY. Скачать её можно с официального сайта здесь . Качаем просто putty.exe для Windows. Чтобы сделать в putty подключение по ssh нам нужно выполнить определённые настройки. Запускаем putty.exe и видим следующее окно.


Я сильно в конфигурации программы не копался, мне хватило настроек по умолчанию. Самые важные я отметил стрелками.

  • 1 - адрес ssh сервера (смотрим у хостера)
  • 2 - как я писал выше задан порт 22 по умолчанию для подключения ssh
  • 3 - тип соединения

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

Подключение по ssh через PuTTY к Timeweb


  • 1 - в поле адрес сервера можно ввести ip
  • 2 - или в поле адрес сервера можно ввести адрес
  • 3 - один из подводных камней, не забывайте включать доступ по ssh. При правильных настройках PuTTY долго не мог понять почему не подключаюсь. Оказывается был отключён доступ.

После ввода нужных нам настроек жмём кнопку "Open" и попадаем в окошко ввода логина. Здесь всё просто, вводим логин от аккаунта таймвеб. У меня окно программы белого цвета потому что я поковырялся в настройках. После ввода логина жмём enter.


И попадаем в окно ввода пароля. Пароль так же берём от аккаунта таймвеб. Вроде всё просто, но есть один нюанс.


Важно: Пароль приходится вводить в слепую. При вводе пароля не появляются данные и не движется курсор.

Я по началу то же растерялся. Подумал что программа глючит. После ввода пароля жмём как всегда enter и если всё хорошо то попадаем в командную строку. Для проверки работоспособности я ввёл команду touch test.txt .


Команда должна создать в вашей корневой папке на хостинге файл test.txt. Смотрим через файловый менеджер что он появилcя на хостинге и радуемся. У нас всё получилось. Вот таким вот не сложным способом мы сделали в putty подключение по ssh к хостингу таймвеб.

Уважаемые читатели, сегодня мы с Вами продолжаем настраивать наш Ubuntu Server 10.04 LTS. В этой статье нам о том, без чего настоящий системный администратор ну никак не может позволить себе обойтись! :)

Часто возникает необходимость удаленно подключиться к серверу и что-либо на нем сделать, например подредактировать конфигурацию или перезапустить один из сервисов. Так как не всегда есть возможность получить физический доступ к нужному компьютеру (он может находиться в соседнем здании или вообще в другой стране, у него нет монитора, а может быть Вы - далеко и хотите посмотреть, что творится с сервером через коммуникатор/ноутбук)?

Для этих целей как нельзя лучше подойдет SSH. Установка сервера SSH очень проста, для этого выполним apt-get install sshd После установки он сразу может принимать подключения без дополнительной настройки.

Давайте несколько слов скажем о том, что же это за "зверь" такой - SSH? Это сокращение от Secure Shell (безопасная оболочка). Представляет собой сетевой защищенный протокол, который позволяет осуществлять управление удаленным компьютером и туннелирование нашего сетевого соединения с ним.

SSH на лету шифрует весь передаваемый трафик и пароли по особому криптостойкому алгоритму, делая перехват данных злоумышленником попросту бессмысленным. Принцип его работы показан на схеме ниже:

Видим, что сетевое TCP соединение как-бы "заворачивается" (туннелируется) с помощью ssh протокола и программа-перехватчик (sniffer), установленная на компьютере злоумышленника не может "пробиться" через стенки этого "тоннеля".

Чтобы удаленно подключиться к серверу, рекомендую использовать замечательный SSH-клиент - «PuTTY » (вот ). Программа хороша тем, что не требует установки, имеет удобный интерфейс, возможность сохранения настроек подключения, может работать с разными символьными кодировками и много чего еще.

Запускаем PuTTY, в списке слева выбираем Window->Translation , в выпадающем списке выбираем UTF8 , без этого все русские надписи будут отображаться "кракозябрами". Возвращаемся в пункт Session и в поле адреса (в правой стороне окна) вводим 192.168.0.2 (адрес вашего сервера), тип подключения указываем SSH.

Можно сохранить эти настройки для последующих подключений, введя имя подключения в поле “saved sessions” и нажав кнопку save. В следующий раз для быстрого соединения можно будет просто дважды нажать на название сессии.

По умолчанию подключение происходит по порту под номером 22 (именно его изначально "прослушивает" наш ssh-сервер, ожидая запроса на соединение от доверенного клиента).



При первом подключении к серверу появится «ошибка» и окно с предупреждением о том, что ключ шифрования неизвестен. Просто нажмите «да, добавить» и новый ключ будет сгенерирован автоматически.

Если подключение состоялось, перед нами появится окно терминала удаленного компьютера (нашего сервера) с запросом на ввод логина. После ввода логина появится запрос на ввода пароля. Если все введено верно, мы увидим примерно такое приветствие Ubuntu:



Поздравляю! Мы подключились! :) Теперь нам нужно получить права root (администратор). Для этого набираем в терминале: sudo su , нажимаем Enter и вводим свой пароль, если все правильно, то получится что-то вроде: root @servername:/home/username#

Знак «~ » тильда, указывает на то, что мы находимся в домашней папке текущего пользователя

$ - "говорит", что мы - в пользовательском режиме

# - режим привилегированного суперпользователя (root)

Все! Теперь можно производить различные манипуляции с сервером удаленно. Думаю, этим мы с Вами займемся уже в следующей статье:)

Что такое и для чего нужен SSH

Безопасный шелл (SSH) - это сетевой протокол, обеспечивающий функции шелла на удалённой машине через безопасный канал. SSH несёт в себе различные улучшения безопасности, среди них аутентификация пользователя/хоста, шифрование данных и целостность данных, благодаря чему невозможны популярные атаки вроде подслушивания (eavesdropping), DNS/IP spoofing, подделка данных (data forgery), перехват соединения (connection hijacking) и т. д. Пользователям ftp, telnet или rlogin, которые используют протокол, передающий данные в виде открытого текста, крайне рекомендуется переключиться на SSH.

OpenSSH - это реализация с открытым исходным кодом протокола SSH, позволяющая шифровать соединение в сети посредством набора программ. Если вам хочется иметь SSH на Linux, вы можете установить OpenSSH, который состоит из сервера OpenSSH и клиентских пакетов.

OpenSSH серверные/клиентские пакеты поставляются со следующими утилитами:

  • OpenSSH сервер: sshd (SSH daemon)
  • OpenSSH клиент: scp (безопасное удалённое копирование), sftp (безопасная передача файлов), slogin/ssh (безопасный удалённый вход), ssh-add (дополнение закрытого ключа), ssh-agent (агент аутентификации), ssh-keygen (управление ключами аутентификации).
Установка сервера и клиента OpenSSH на Linux

Если вы хотите установить сервер/клиент OpenSSH и настроить автоматический запуск сервера OpenSSH, следуйте следующим инструкциям, которые различаются в зависимости от дистрибутива.

Debian, Ubuntu или Linux Mint

$ sudo apt-get install openssh-server openssh-client

В системах основанных на Debian, сразу после установки, OpenSSH будет запускаться автоматически при загрузке. Если по каким либо причинам сервер OpenSSH не запускается автоматически при запуске системы, вы можете выполнить следущую команду для однозначного добавления ssh в загрузку при старте системы.

$ sudo update-rc.d ssh defaults

Fedora или CentOS/RHEL 7

$ sudo yum -y install openssh-server openssh-clients $ sudo systemctl start sshd service $ sudo systemctl enable sshd.service

CentOS/RHEL 6

$ sudo yum -y install openssh-server openssh-clients $ sudo service sshd start $ sudo chkconfig sshd on

Arch Linux

$ sudo pacman -Sy openssh $ sudo systemctl start sshd service $ sudo systemctl enable sshd.service

Настройка сервера OpenSSH

Если вы хотите настроить сервер OpenSSH, вы можете редактировать общесистемный файл конфигурации размещённый в /etc/ssh/sshd_config.

Есть пара опций OpenSSH, которые могут заинтересовать:
По умолчанию, sshd прослушивает порт 22 и ожидает входящие соединения ssh. Изменив порт по умолчанию для ssh, вы можете предотвратить различные автоматизированные атаки хакеров.
Если ваша машина имеет более чем один физический сетевой интерфейс, возможно вы заходите уточнить, какой из них связан с sshd, для этого вы можете использовать опцию ListenAddress. Эта опция помогает улучшить безопасность посредством ограничения входящих SSH только через особый интерфейс.

HostKey /etc/ssh/ssh_host_key

Оция HostKey определяет гда размещён персональный хост ключ.

PermitRootLogin no

Оция PermitRootLogin – может ли root входить в систему посредством ssh.

AllowUsers alice bob

Используя опцию AllowUsers вы можете выборочно отключить службу ssh для определённых пользователей Linux. Можно задать множество пользователей, разделяя их пробелами.

После того, как был изменён /etc/ssh/sshd_config , убедитесь, что перезапустили службу ssh.

Для перезапуска OpenSSH на Debian, Ubuntu или Linux Mint:

$ sudo /etc/init.d/ssh restart

Для перезапуска OpenSSH на Fedora, CentOS/RHEL 7 или Arch Linux:

$ sudo systemctl restart sshd.service

Для перезапуска OpenSSH на CentOS/RHEL 6:

$ sudo service sshd restart

Как подключиться к SSH

Подключение к SSH из Linux

Пользователям Linux не нужно устанавливать дополнительных программ.

Подключение к SSH из Windows

Скрыто от гостей

.

Cygwin – это не просто клиент SSH. Это мощный комбайн, в котором поддерживаются многие команды Linux. Например, в Cygwin очень легко создавать SSL-сертификаты (точно также, как и в Linux). В Windows для создания самоподписанных сертификатов нужно поплясать с бубном. В Cygwin очень удобно пользоваться cURL (не нужно ничего устанавливать отдельно) и т. д. Те, кому не хватает на Windows командной строки и программ Linux, в лице Cygwin найдут себе отдушину.

Установка Cygwin проста. Переходим на

Скрыто от гостей

И скачиваем

Скрыто от гостей

Скрыто от гостей

Скачается крошечный файл - это установщик. Установщик графический. Хоть он и содержит большое количество опций, все они довольно простые и многие знакомы по другим графическим установщикам. Если что-то непонятно, просто нажимайте «Далее». Пожалуй, только следующее окно может привести в замешательство:

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

Соединение SSH (общее для Linux и Windows)

Пользователи Linux открывают консоль, пользователи Windows печатают в Cygwin.

SSH нужна следующая информация для подключения:

  • IP или имя хоста
  • номер порта
  • имя пользователя
  • пароль пользователя
Два из этих параметров SSH может предположить: имя пользователя и номер порта. Если порт не указан, то предполагается порт по умолчанию. Если не указан пользователь, то используется то же имя, что и в системе, из которой происходит подключение. Например, адрес хоста для подключения 192.168.1.36 . Если я наберу

Ssh 192.168.1.36

Я вижу следующее

Alex@MiAl-PC ~ $ ssh 192.168.1.36 The authenticity of host "192.168.1.36 (192.168.1.36)" can"t be established. ECDSA key fingerprint is SHA256:sIxZeSuiivoEQ00RXAQHxylxuEA8SC5r/YPhL8wfp8s. Are you sure you want to continue connecting (yes/no)?

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

Warning: Permanently added "192.168.1.36" (ECDSA) to the list of known hosts. [email protected]"s password:

Хорошо, хост 192.168.1.36 добавлен в список знакомых хостов. У меня запрашивается пароль для пользователя Alex. Поскольку на сервере с SSH нет такого пользователя, но я нажимаю Ctrl+C (для разрыва) и ввожу команду вместе с именем пользователя удалённой системы. Пользователь вводится перед адресом удалённой машины и отделяется от адреса символом @. Символ @ на английском читается как at и можно перевести как «в». Т.е. запись [email protected] можно истолковать как «пользователь mial в машине 192.168.1.36 ».

Ssh [email protected]

Приглашение Alex@MiAl-PC сменилось приглашением mial@mint . Это означает, что мы уже на удалённой машине, т. е. у нас уже произошло соединение. Если нужно указать порт (если он отличается от стандартного), то порт нужно указывать после ключа -p. Например так:

Ssh [email protected] -p 10456

После подключения нас встречает примерно такое приветствие:

Linux mint 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Jun 16 15:32:25 2015 from 192.168.1.35

Из него следует, что удалённая машина - это Linux Mint, с ядром 3.16, 64-битная версия. Также важная информация о времени последнего входа и IP адресе с которого произошло соединение. Если время и IP вам незнакомы, а вы являетесь единственным пользователем, то ваша система скомпрометирована и нужно принимать соответствующие меры.

Наберём несколько команд, чтобы убедиться где мы и кто мы: pwd, [B]uname -a и т. д.:

Чтобы закончить сессию (отключиться), наберите

Или нажмите Ctrl+D .

Вход в SSH без ввода пароля

Во-первых, это просто удобнее. Во-вторых, это безопаснее.

Во-первых, нам нужно создать rsa ключи. Если вы пользователь Linux, то у вас всё в порядке. Если вы пользователь Windows, но вы не послушали мой совет и выбрали PuTTY, то у вас проблема и думайте сами, как её решать. Если у вас Cygwin, то всё также в порядке.

Если вы успели залогиниться на удалённой системе, разлогинтесь. После этого наберите

Ssh-keygen -t rsa

У нас спрашивают имя файла, не нужно ничего вводить, будет использовано имя по умолчанию. Также спрашивается пароль. Я пароль не ввожу.

Теперь на удалённой машине нам нужно создать каталог.ssh. Про выполнение команда на удалённой машине ещё будет рассказано ниже. Пока просто копируете команду, не забывая поменять IP адрес и имя пользователя на свои:

Ssh [email protected] mkdir .ssh

Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину. Сделать это очень просто (не забываем менять данные на свои):

Cat .ssh/id_rsa.pub | ssh [email protected] "cat >> .ssh/authorized_keys"

Теперь просто логинимся и больше никакой пароль у нас не спрашивают. И так теперь будет всегда.

Выполнение команд на удалённом сервере без создания сессии шелла

Кроме открытия сессии шелла на удалённой системе, ssh также позволяет выполнять отдельные команды на удалённой системе. Например, для выполнения команды tree на удалённом хосте с именем remote-sys и отображением результатов на локальной системе, нужно сделать так:

Ssh remote-sys tree

Мой реальный пример:

Ssh [email protected] tree

Используя эту технику, можно делать интересные вещи, вроде такой, как выполнение команды ls на удалённой системе и перенаправление вывода в файл на локальной системе:

Ssh remote-sys "ls *" > dirlist.txt

Реальный пример:

Ssh [email protected] "ls *" > dirlist.txt cat dirlist.txt

Обратите внимание на одиночные кавычки в вышеприведённой команде. Это сделано потому, что мы не хотим, чтобы раскрытие пути было выполнено на локальной машине; поскольку нам нужно это выполнение на удалённой системе. Также если мы хотим стандартный вывод перенаправить в файл на удалённой машине, мы можем поместить оператор редиректа и имя файла внутри одиночных кавычек:

Ssh remote-sys "ls * > dirlist.txt"

Передача стандартного вывода с локальной машины на удалённую по ssh

Не менее интересный вариант выполнения команд приведён немного выше:

Cat .ssh/id_rsa.pub | ssh [email protected] "cat >> .ssh/authorized_keys"

  • Команда cat построчно считывает и отображает содержимое файла.ssh/id_rsa.pub , расположенного на локальной машине.
  • | (труба) передаёт то, что должно было бы появиться в стандартном выводе, другой команде.
  • Вместо команды, которая должна была бы обрабатывать передаваемые ей строки, происходит соединение к удалённой системе (ssh [email protected]).
  • На удалённую систему приходят строки, для которых предусмотрена команда cat >> .ssh/authorized_keys . Т.е. содержимое стандартного вывода построчно записывается в файл.ssh/authorized_keys, находящийся на удалённой машине.
Открытие графической программы, расположенной на удалённом компьютере

Для следующего фокуса нужно два компьютера с системой Linux. К сожалению, даже Cygwin с этим трюком не справляется. Причём оба Linux"а должны быть с графическим пользовательским интерфейсом.

Туннелирование с SSH

Среди всего прочего, что происходит когда устанавливается соединение с удалённым хостом через SSH, это создание зашифрованного туннеля, который образуется между локальной и удалённой системами. Обычно, этот туннель используется для того, чтобы набранные на локальной машине команды безопасно были переданы удалённой машине, а результат, также безопасно, прислан обратно.

В добавок к этой базовой функции, протокол SSH позволяет переправлять большинство типов трафика по зашифрованному туннелю, создавая некого рода VPN (виртуальную частную сеть) между локальной и удалённой системами.

Пожалуй самая часто используемая из этих функций - это возможность транслировать трафик систем X Window. На системе с запущенным X сервером (это машины, которые имеют графический пользовательский интерфейс) возможно запустить программу X клиента (графическое приложение) на удалённой системе и видеть результаты её работы на локальной системе. Сделать это просто. Например, я хочу подключиться к удалённому хосту remote-sys и на нём я хочу запустить программу xload. При этом видеть графический вывод этой программы я смогу на локальном компьютере. Делается это так:

Ssh -X remote-sys xload

Реальный пример:

Ssh -X [email protected] gedit

Т.е. SSH запускается с ключом -X. А затем просто запускается программа. Посмотрите на скриншот.

Я нахожусь в Kali Linux. Я успешно логинюсь к удалённому компьютеру по SSH. После этого я запустил программу gedit. Этой программы, может быть, даже нет на Kali Linux, но она точно есть в Linux Mint, к которой я и подключился. Результат работы этой программы я могу видеть на экране так, будто бы программа запущена локально. Но, повторюсь, я хочу, чтобы вы это поняли, запущенной программы gedit на локальном компьютере нет. Если я захочу сохранить результат работы gedit (или любой другой программы, открытой таким образом), то окажется, что она работает в окружении удалённого компьютера, видит его файловую систему и т. д. Это удобно, когда вы хотите настроить удалённый компьютер используя графический интерфейс.

О том, как передать изображение со всего рабочего стола вы узнаете в этой же статье далее, в секции «Как настроить VNC через SSH».

На некоторых системах для этого «фокуса» нужно использовать опцию “ -Y ” вместо опции “ -X ”.

Копирование с/на удалённый компьютер (scp и sftp)

scp

Пакет OpenSSH также включает две программы, которые использует зашифрованный туннель SSH для копирования файлов по сети. Первая программа – scp («безопасное копирование») – используется чаще, как и схожая с ней программа cp для копирования файлов. Наиболее заметная разница в том, что источником файла может быть удалённый хост после которого следует двоеточие и расположение файла. Например, если мы хотим скопировать документ, названный document.txt из нашей домашней директории на удалённую систему remote-sys в текущей рабочей директории на нашей локальной системе мы можем сделать так:

Scp remote-sys:document.txt . document.txt 100% 177 0.2KB/s 00:00

Реальный пример:

# удалим файл на локальной машине, если он есть rm dirlist.txt # создадим файл на удалённой машине ssh [email protected] "ls * > dirlist.txt" # проверим его наличие ssh [email protected] "ls -l" # скопируем его на локальную машину scp [email protected]:dirlist.txt . # проверим его содержимое cat dirlist.txt

  • [email protected] - имя пользователя и удалённый хост,
  • . (точка) означает, что файл нужно скопировать в текущую рабочую директорию на удалённом сервере, при этом имя файла останется прежним, т. е. nfile.txt
  • Памятка :

    Для копирования файла с B на A когда залогинены в B:
    scp /path/to/file username@a:/path/to/destination
    Копирование файла с B на A когда залогинены в A:
    scp username@b:/path/to/file /path/to/destination

    sftp

    Вторая программа для копирования файлов через SSH - это sftp . Как следует из её имени, она является безопасным заменителем ftp программ. sftp работает как и оригинальная ftp программа. Тем не менее, вместо отправки чистым текстом она использует зашифрованный туннель SSH. Важным преимуществом sftp перед ftp является то, что для неё не требуется запущенный FTP сервер на удалённом хосте. Для неё требуется только SSH сервер. Это означает, что любая удалённая машина, которая подключена через SSH клиент может также быть использована как FTP-подобный сервер. Вот пример сессии:

    Alex@MiAl-PC ~ $ sftp [email protected] Connected to 192.168.1.36. sftp> ls dirlist.txt newfile.txt nfile.txt temp Видео Документы Загрузки Изображения Музыка Общедоступные Рабочий стол Шаблоны sftp> lls dirlist.txt nfile.txt sftp> ls temp temp/TakeMeHome sftp> cd temp/ sftp> get TakeMeHome Fetching /home/mial/temp/TakeMeHome to TakeMeHome sftp> bye

    SFTP протокол поддерживается многими графическими файловыми менеджерами, которые можно найти в дистрибутивах Linux. Используя как Nautilus (GNOME), так и Konqueror (KDE), мы можем вводить URI (ссылки) начинающиеся на sftp:// в строку перехода и работать с файлами, расположенными на удалённой системе с запущенным SSH сервером.

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

    Программа Putty для соединения с сервером по SSH протоколу

    Скачиваем Putty с сайта putty.org Для себя я скачиваю версию «For Windows on Intel x86 — PuTTY: putty.exe»

    Распаковываем архив, запускаем программу.

    Вот так выглядит окно программы после запуска. Я уже ввел IP адрес своего сервера в поле «Host Name (or IP address)»:

    Вводим домен или IP адрес своего сервера и нажимаем кнопку «Open». Открывается окно командной строки. Оно запрашивает у нас логин и пароль пользователя. Вначале вводим логин, затем, пароль. Внимание, во время вода пароля — символы на экране не печатаются, не печатаются даже звездочки ***. Поэтому пароль вводим как бы вслепую. Вводим и нажимаем Enter. Если пароль ввели верно, то происходит вход в консоль управления сервером. Выводится строка с временем последнего входа, и информация о операционной системе.

    Команды в консоли

    pwd

    df

    Команда df показывает размер свободного и занятого пространства на сервере, во всех смонтированных файловых системах

    du

    Команда du показывает сколько места занимает папка или файл.
    Пример команды:

    Du -h /home/

    Эта команда покажет сколько места занимает директория /home/

    На этом все. Первое знакомство с подключением к серверу по SSH и программой putty закончено. Используя эту информацию можно зайти на сервер, и посмотреть сколько места занимают данные на нем.

    SSH - (Secure Shell) - это протокол удаленного управления компьютером с операционной системой Linux. В основном ssh используется для удаленного управления серверами через терминал. Если вы администратор нескольких серверов или даже продвинутый веб-мастер, то наверное, вы часто сталкиваетесь с необходимостью работать с тем или иным компьютером по ssh. В Linux для этого используется сервер ssh на машине, к которой нужно подключится и клиент, на той из которой подключаются.

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

    Но начнем с самых основ.

    Синтаксис команды выглядит следующим образом:

    $ ssh [опции] имя пользователя @сервер [команда]

    Важно заметить что ssh может работать по двум версиям протокола. Версии 1 и 2. Понятное дело, что версия 2 лучше и поддерживает больше типов шифрования и аутентификации. Больше в этой статье об отличиях протоколов мы говорить не будем и я буду подразумевать что вы используете версию 2.

    Опции команды SSH

    Теперь давайте рассмотрим самые основные опции команды ssh:

    • f - перевести ssh в фоновый режим
    • g - разрешить удаленным машинам обращаться к локальным портам
    • l - имя пользователя в системе
    • n - перенаправить стандартный вывод в /dev/null
    • p - порт ssh на удаленной машине
    • q - не показывать сообщения об ошибках
    • v - режим отладки
    • x - отключить перенаправление X11
    • X - включить перенаправление Х11
    • C - включить сжатие

    Это далеко не все опции утилиты, остальные выходят за рамки данной статьи. Многие настройки работы ssh можно изменять через конфигурационный файл ~/.ssh/config но здесь мы это тоже подробно рассматривать не будем.

    Настройка сервера SSH

    Настройки сервера SSH находятся в файле /etc/ssh/sshd_config. Многие из них мы тоже трогать не будем. Рассмотрим только самые интересные. Сначала откройте файл /etc/ssh/sshd.conf

    Порт ssh

    По умолчанию ssh работает на порту 22. Но такое поведение небезопасно, поскольку злоумышленник знает этот порт и может попробовать выполнить Bruteforce атаку для перебора пароля. Порт задается строчкой:

    Поменяйте значение порта на нужное.

    Протокол SSH

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

    И приведите ее к такому виду:

    Рут доступ

    По умолчанию Root доступ по ssh разрешен, но такое поведение очень небезопасно, поэтому раскомментируйте строчку:

    PermitRootLogin no

    Доступ только определенного пользователя к SSH

    Мы можем разрешить доступ к ssh только для определенного пользователя или группы. Для этого добавьте строчки:

    AllowUsers User1, User2, User3
    AllowGroups Group1, Group2, Group3

    Здесь User1 и Group1 - пользователь и группа к которым нужно разрешить доступ.

    Выполнение X11 приложений

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

    X11Forwarding yes

    Основные опции рассмотрели, перед тем как переходить дальше, не забудьте перезагрузить ssh сервер чтобы сохранить изменения:

    service sshd restart

    Использование SSH

    Основная цель этой статьи - показать интересные и полезные способы использования ssh, о которых, возможно, вы не знали. Переходим к самому вкусному - возможности ssh.

    Подключение к серверу

    Чтобы просто подключиться к серверу по SSH используйте такую команду:

    Выполнить команду

    Мы привыкли подключаться к удаленному серверу, а уже потом выполнять нужные команды, но на самом деле утилита ssh позволяет сразу выполнить нужную команду без открытия терминала удаленной машины. Например:

    ssh user@host ls

    Выполнит команду ls на удаленном сервере и вернет ее вывод в текущий терминал.

    Выполнить локальный скрипт

    Выполним интерпретатор bash на удаленном сервере и передадим ему наш локальный скрипт с помощью перенаправления ввода Bash:

    ssh user@host "bash -s" < script.sh

    Бекап на удаленный сервер и восстановление

    Мы можем сохранять бекэп диска сразу на удаленном сервере с помощью ssh. Перенаправим вывод dd с помощью оператора перенаправления |, затем сохраним его на той стороне в файл:

    sudo dd if=/dev/sda | ssh user@host "dd of=sda.img"

    Теперь чтобы восстановить состояние диска из сделанной копии выполните:

    ssh user@host "dd if=sda.img" | dd of=/dev/sda

    Здесь и выше /dev/sda имя файла вашего жесткого диска.

    Аутентификация без пароля

    Использование ssh пароля для входа на сервер не только неудобно но и небезопасно, потому что этот пароль в любой момент может быть подобран. Самый надежный и часто используемый способ аутентификации - с помощью пары ключей RSA. Секретный ключ хранится на компьютере, а публичный используется на сервере для удостоверения пользователя.

    Настроить такое поведение очень легко. Сначала создайте ключ командой:

    ssh-keygen -t rsa

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

    Затем отправляем ключ на сервер:

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

    Взять пароль из локального файла

    Напомню, что хранить пароли в обычных текстовых файлах небезопасно, но если хотите, то да - возможно. Для этого используется оператор перенаправления ввода Bash:

    ssh user@host < local_file.txt

    Изменить приветствие SSH

    При входе по ssh может выводиться приветствие, изменить его очень легко. За это отвечает файл /etc/issue. Просто откройте этот файл и введите нужный текст:

    Смотрим неудачные попытки входа SSH

    Хотите посмотреть были ли попытки неудачного доступа по ssh к вашему серверу и с каких IP адресов? Запросто, все запросы логируются в файл /var/log/secure, отфильтруем только нужные данные командой:

    cat /var/log/secure | grep "Failed password for"

    Передача файлов по SSH

    Кроме выполнения команд, можно копировать файлы по ssh. Для этого используется утилита scp. Просто укажите файл, который нужно передать, удаленный сервер и папку на сервере, вот:

    $ scp /адрес/локального/файла пользователь@ хост: адерс/папки

    Например:

    scp ~/test.txt user@host:documents

    Кроме утилиты scp, передача файлов ssh может быть выполнена более хитрым способом. Прочитаем файл и с помощью cat, передадим, а там сохраним поток в файл:

    cat localfile | ssh user@host "cat > remotefile"

    ssh user@host "cat > remotefile" < localfile

    tar czf - /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/

    Такое копирование файлов ssh позволяет отправлять сразу целые папки.

    Запуск графических приложений по ssh

    Если вам нужно запустить то или иное графическое приложение на удаленной машине необязательно для этого использовать VNC, вы можете обойтись возможностями ssh. Программа будет выполняться на стороне сервера, а вам будет лишь транслироваться окно, чтобы вы могли сделать все что нужно. Причем все данные шифруются. Чтобы эта функция работала, нужно включить ее поддержку на стороне сервера.

    Затем просто выполняем команду запуска графического приложения на удаленном сервере вот таким образом:

    ssh -XC user@remotehost "eclipse"

    Как вы уже видели опция X разрешает перенаправление X11 на стороне клиента, а С - сжатие данных.

    Завершение сессии ssh

    Если вы использовали ssh с нестабильным интернетом, когда соединение время от времени рвется, то вам уже, наверное, надоело закрывать терминал, потому что иначе, на первый взгляд, сеанс никак не прекратить. Когда соединение с удаленным сервером разорвано вы не можете ввести никакую команду и сочетания клавиш Ctrl+C, Ctrl+Z, Ctrl+D не работают. И не будут работать поскольку клиент пытается отправить эти команды на сервер. Но есть решение - Escape последовательности. Чтобы активировать их поддержку добавьте строку:

    В файл /etc/ssh/ssh_config