Удаленное соединение через протокол ssh

SSH (англ. Secure Shell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов).

SSH позволяет безопасно передавать в незащищённой среде практически любой другой сетевой протокол. Таким образом, можно не только удалённо работать на компьютере через командную оболочку, но и передавать по шифрованному каналу звуковой поток или видео (например, с веб-камеры)[2]. Также SSH может использовать сжатие передаваемых данных для последующего их шифрования.

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

В Linux, чтобы проверить и запустить сервис нужно выполнить команды:

$ service ssh status
$ service ssh start

Если в системе не установлена служба/сервис ssh, то ставим из репозитория системы. К примеру, под Ubuntu:

$ sudo apt-get install openssh-server

Процесс соединения по SSH

SSH предлагает 2 вида соединения между клиентом и сервером.

  • Первый способ — это обычный способ авторизации через ip, логин и пароль;
  • Второй способ — через публичный и приватный ключи.

Первый способ мне не особо интересен, потому что привычен, а вот второй, пожалуй, рассмотрим детально.

Авторизация через SSH по паролю и логину

Не буду приводить примеры соединения через различные GUI — оболочки, просто напишу команду авторизации через любую консоль

$ ssh user@server.com

Далее система попросит подтвердить распечатку ключа соединения по умолчанию и пароль входа.

Авторизация через SSH по ключам

Чтобы сделать авторизацию через ключей SSH на Windows нам необходимо сначала их создать. В Windows вы можете создавать ключи SSH разными способами. Этот пост объясняет, как использовать два приложения OpenSSH и Git Bash.

Установка Git и генерация ключей

Сначала нам потребуется Git и командная оболочка, которая поставляется с этой системой. Через него мы будем генерировать приватный и публичный ключи доступа в папку ~/.ssl. Скачать ее можно на официальном сайте.

После скачивания Git поэтапно выполняем команды.

Откройте Git Bash.

Для тех, кто не в курсе, как это делается
Замечу, что классическая консоль Git — не единственный способ ввода команд. Для этого, также, можно воспользоваться и встроенным терминалом в Visual Studio Code, выбрав тип оболочки Bash. Но учтите, что это вовсе не значит, что вы не должны поставить Git с Bash, потому что VS Code запускает не встроенный, а вами установленный, но удобно, когда консоль и редактор кода в одном окне
Пример запуска консоли Git Bash в терминале VS Code

Вставьте текст ниже, подставив в свой адрес электронной почты GitHub.

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Это создаст новый ключ ssh, используя предоставленный email в качестве метки

> Generating public/private rsa key pair.

Когда вам будет предложено « Enter a file in which to save the key», нажмите Enter. Это принимает местоположение файла по умолчанию

> Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):[Press enter]

Далее командная строка запросит фразу-пароль, который потребуется вводить 2 раза(пароль не видна при вводе)

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

Запуска служб OpenSSL в Windows 10

На момент написания данной статьи в Windows 10 на уровне операционной системы уже была внедрена служба OpenSSL. Возможно, что она не активна по умолчанию и, чтобы соединиться, нам потребуется запустить службы SSL

Запускаем OpenSSL — службы в панели Службы

Соединение с удаленным терминалом Linux из Windows через публичный ключ SSL

Для соединения вашей машины Windows с удаленным сервером по протоколу SSH необходимо, чтобы был запущен OpenSSH Authentification Agent и OpenSSH SSH Server в режиме background, в предыдущем пункте я показал как это сделать через GUI, но повторю, как это делать через консоль Bash

$ eval $(ssh-agent -s)

после запуска консоль покажет идентификатор запуска службы

> Agent pid 59566

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

ssh-add ~/.ssh/id_rsa

Далее, необходимо убедится, что и на стороне сервера был запущен сервис ssh (так он именуется в Linux) на порту 22, про это и как это делается уже было сказано в начале данного поста, повторяться не буду.

Передача ключа в удаленный Linux

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

Самый простой и рекомендуемый способ скопировать ваш открытый ключ на сервер — использовать утилиту ssh-copy-id. На вашем локальном компьютере. Для этого набираем в терминале Bash

$ ssh-copy-id remote_username@server_ip_address

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

Передача ключа на GitHub

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

> clip < ~/.ssh/id_rsa.pub

Заходим в профиль нашего аккаунта GitHub, в правом верхнем углу любой страницы нажмите на фотографию своего профиля, затем нажмите «Настройки»

Настройки

На боковой панели настроек пользователя нажмите клавиши SSH и GPG

SSH и GPG ключи

Нажмите Новый ключ SSH или Добавить ключ SSH

Пункт добавления нового ключа

Вставьте свой ключ в поле «Ключ»

Вставляем скопированный выше публичный ключ

Жмем кнопку Добавить и вводим пароль подтверждения от своего аккаунта и все, можно работать в Git без пароля через публичный ключ SSH.