Перейти к содержимому
Alex Kovalev

Базовый гайд по SSH

Цель этого гайда — познакомить вас с `ssh cli` на простых примерах, которые закрывают 80% потребностей.

3мин чтения

Цель этого гайда — познакомить вас с ssh cli на простых примерах, которые закрывают 80% потребностей.

Что такое SSH?

SSH расшифровывается как (S)ecure (SH)ell. Это протокол — набор правил связи между компьютерами, созданный специально для доступа к shell. С его помощью вы можете безопасно подключиться к удалённой машине и выполнять команды shell, например ls -la.

Как и любой другой протокол — bluetooth, torrent, tcp/ip — сам по себе он бесполезен и требует реального клиента (программы), реализующего протокол. Так же как вы используете qbittorrent для реализации протокола torrent, вы используете openssh для реализации ssh. Есть и графические клиенты вроде cyberduck, filezilla и многих других, но для любой серьёзной работы вы по умолчанию будете использовать openssh. Давайте установим его.

Установка SSH-клиента

Возьмите свой любимый пакетный менеджер и выполните команду установки

Terminal window
# Ubuntu/Debian
sudo apt install openssh-client
# macOS (если отсутствует)
brew install openssh
# Windows (выберите один вариант)
winget install OpenSSH
choco install openssh

Поздравляю! Первый шаг сделан. Запустите ssh в терминале, чтобы увидеть доступные команды, а man ssh — чтобы почитать руководство.

Создание вашего первого SSH-ключа

Следующий шаг — настроить ваш пароль, точнее говоря, “ключ”.

SSH использует пару ключей:

  • приватный ключ, он остаётся на вашем компьютере
  • публичный ключ, который вы размещаете на сервере

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

Terminal window
# Email нужен только для идентификации
ssh-keygen -t ed25519 -C "your-email@example.com"

ssh-keygen поставляется вместе с cli openssh, так что ничего дополнительно устанавливать не нужно

-t указывает тип шифрования

-C добавляет комментарий, обычно ваш email, чтобы потом можно было отличить ключи друг от друга

вы можете задать эти переменные вручную и просто запустить ssh-keygen

Как работает доверие в ssh?

Чтобы безопасно (первая S, помните?) выполнять команды, нужно установить доверие между двумя ключами. Ваш сервер хранит публичный ключ, вы — приватный.

Рукопожатие выглядит так:

  1. Ваш ssh-клиент просит сервер о подключении.
  2. Сервер отвечает “испытанием” (challenge) и просит подписать некоторые данные.
  3. Ваш клиент подписывает их приватным ключом и отправляет ответ обратно.
  4. Сервер проверяет ответ с помощью публичного ключа.
ваш ноутбукid_ed25519
серверid_ed25519.pub(пусто)
  1. ноутбук стучится
  2. сервер шлёт случайное испытание
  3. приватный ключ его подписывает
  4. публичный ключ проверяет подпись
$ ssh user@server
сервер: подпиши это → 7c2e91af
ноутбук: подписал → 3b0f6d2a
сервер: совпадает с id_ed25519.pub
Welcome to Ubuntu 24.04 LTS
По сети едет только подпись. Приватный ключ сидит дома.

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

Подключение к удалённой машине

Теперь, когда у вас есть свой ssh-ключ, пора им воспользоваться. Для следующего шага вам понадобится знать:

  • ip вашего сервера
  • имя пользователя
  • пароль

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

Terminal window
ssh-copy-id username@server-ip
# поставляется вместе с open-ssh клиентом

Вы также можете сделать эту часть вручную, скопировав публичный ключ в файлы сервера, если возникнут какие-то проблемы. Подробнее об этом в следующем разделе.

И не переживайте, пароль понадобится только этот единственный раз. Как только ключ появится на целевой машине, при следующем входе понадобится только указать имя пользователя и адрес, а клиент автоматически ответит на challenge за вас! Круто, правда?

Вы можете ещё больше упростить это с помощью алиаса, подробнее об этом здесь

Сделать это вручную

Выполните следующие команды по порядку

Terminal window
# Скопировать содержимое публичного ключа
cat ~/.ssh/id_ed25519.pub # выполните это, чтобы увидеть публичный ключ на вашей машине
# Подключиться к серверу с помощью пароля
ssh username@server-ip
mkdir -p ~/.ssh # как и на вашем компьютере, серверу нужна директория .ssh
echo "paste-public-key-here" >> ~/.ssh/authorized_keys # это создаст файл authorized_keys с вашим ключом внутри
chmod 600 ~/.ssh/authorized_keys # изменить права, чтобы сервер мог получить доступ к файлу
chmod 700 ~/.ssh # изменить права, чтобы сервер мог получить доступ к директории

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

Смена пароля-фразы вашего ключа

Обычно ssh-keygen добавляет к ключу пароль-фразу (passphrase). Это хорошая практика, ведь ключ хранится в виде обычного текста на вашей машине. Но это раздражает, и я им не пользуюсь. Так что если у вас уже есть ssh-ключ с прошлого раза и вы хотите использовать его без необходимости каждый раз вводить passphrase, можно заменить passphrase, как показано ниже

Terminal window
# Ключ по умолчанию
ssh-keygen -p
# Конкретный ключ
ssh-keygen -p -f ~/.ssh/custom_key_name

Алиас для SSH

Чтобы сделать опыт использования ещё приятнее, добавьте алиас для вашего сервера. Найдите расположение конфига SSH, обычно в .ssh:

Terminal window
vim ~/.ssh/config

Настройте хост:

Terminal window
# Простой алиас
Host myserver
HostName 192.168.1.100
User john

После этого можно просто выполнить:

Terminal window
ssh myserver

и мгновенно подключиться!

Смотрите также: перенос аккаунта cPanel из командной строки и бесплатный SSL-сертификат через Certbot — две вещи, которыми вы займётесь, как только окажетесь на сервере.

Комментарии

Комментарии живут в GitHub Discussions (через giscus), так что для участия нужен аккаунт GitHub.

Чирикну, когда выйдет новый пост

Одно письмо на каждый новый пост, обычно по пятницам. Больше ничего, а отписаться можно в любой момент.

Удобнее читать в RSS-ридере? Есть RSS-лента.

© Alex Kovalev. Все права защищены. · Политика конфиденциальности