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.
[note]Замечу, что классическая консоль Git — не единственный способ ввода команд. Для этого, также, можно воспользоваться и встроенным терминалом в Visual Studio Code, выбрав тип оболочки Bash. Но учтите, что это вовсе не значит, что вы не должны поставить Git с Bash, потому что VS Code запускает не встроенный, а вами установленный, но удобно, когда консоль и редактор кода в одном окне[/note]
Вставьте текст ниже, подставив в свой адрес электронной почты 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
Соединение с удаленным терминалом 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 или Добавить ключ SSH
Вставьте свой ключ в поле «Ключ»
Жмем кнопку Добавить и вводим пароль подтверждения от своего аккаунта и все, можно работать в Git без пароля через публичный ключ SSH.