Как подключиться по ssh по закрытому ключу
Перейти к содержимому

Как подключиться по ssh по закрытому ключу

  • автор:

Как подключиться по ssh по закрытому ключу

В данной инструкции мы рассмотрим настройку подключения к удалённому серверу/VPS с Unix и Windows систем.

1) Заходим в домашний каталог и находим директорию .ssh или создаём, если её нет. Выставляем права 600.

# touch ~/.ssh
# chmod 600 ~/.ssh
# cd ~/.ssh

2) Генерируем ключ:

# ssh-keygen -t dsa -b 1024 -f ~/.ssh/auth_key
  • -t dsa — тип ключа
  • -b 1024 — длина ключа
  • -f ~/.ssh/auth_key — директория хранения ключа и его название. auth_key — приватный ключ, auth_key.pub — публичный

Фразу-пароль можем пропустить.

auth_key — будет храниться на сервере/компьютере с которого мы будем выполнять подключение.

auth_key.pub публичный ключ, размещаем на сервере к которому будем подключаться, в папке пользователя (пример: /home/user/.ssh)

3) После размещения публичного ключа на сервере необходимо от него отключиться и выполнить новое подключение уже по ключу.

Сделать это можно следующей командой:

# ssh -i ~/.ssh/auth_key user@192.168.0.1
  • ~/.ssh/auth_key — путь к ключу на нашем компьютере
  • user — имя пользователя под которым подключаемся и в директорию которого мы загрузили публичный ключ.
  • 192.168.0.1 — сервер к которому подключаемся.

Подтверждаем вход — Enter.

Windows:

Для создания ключа и подключения к серверу нам понадобиться 2 программы:

  • PuTTY— SSH клиент
  • PuTTYGen— Утилита, предназначенная для генерации RSA и DSA ключей.

Скачать их можно на официальном сайте

1) Генерируем ключи.

Запускаем PuTTYGen, внизу выбираем тип и длину ключа, нажимаем «Генерировать»:

sshkey1

2) Сохраняем личный и публичный(открытый) ключи.

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

3) Настраиваем сервер к которому будем проводить подключение.

Сначала подключаемся «как обычно» по логину и паролю. В домашнем каталоге пользователя создаем(если нет) директорию .ssh и устанавливаем права 600.

# touch ~/.ssh
# chmod 600 ~/.ssh
# cd ~/.ssh

Теперь создадим файл:

# touch authorized_keys
# chmod 600 authorized_keys
# vi authorized_keys

И в него вставим сгенерированный публичный(открытый) ключ из окна PuTTYGen > «Открытый ключ для вставки. «.

Сохраняем изменения в файле и отключаемся от сервера.

4) Настраиваем PuTTY и подключаемся по ключу.

Открываем PuTTY > Соединение > SSH > Аутентификация > Указываем путь к приватному(личному) ключу.

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

Вводим имя пользователя, нажимаем Enter и подключение будет осуществлено автоматически, без ввода пароля.

Подключение по логину и паролю через PuTTY:

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

Для этого у нас должны быть host (ip-сервера), имя пользователя, пароль пользователя.

1) Открываем PuTTY и вставляем имя хоста в соответствующую строку, после чего подключаемся к серверу:

2) Далее поочередно вводим логин (имя пользователя) и пароль.

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

Также, могут быть полезны статьи:

Как подключиться к серверу по ssh, имея его приватный ключ?

если под «приватным ключом сервера» подразумевается /etc/ssh/ssh_host_rsa_key (или аналогичный для других протоколов шифрования), то он ни как не поможет подключиться к серверу.

26 июл 2021 в 17:41

Тогда возможно это и есть приватный ключ (который id_rsa) и его публичная часть уже лежит на сервере. Что там в начале файла? Покажите первые строчки

26 июл 2021 в 18:03
@Igor Нужно от Вас уточнение. Закрытый ключ сервера (sshd) или закрытый ключ клиента на сервере ?
27 июл 2021 в 3:45

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Ключи всегда генерируются парой открытый/закрытый и это просто два файла например ida_rsa.pub/ida_rsa Поэтому можно взять закрытый ключ (файл ida_rsa) с сервера и положить на клиент, а на сервер публичный ключ (файл ida_rsa.pub) добавить в файл authorized_keys.

FAQ → Вход ssh по ключу ( Linux/Unix )

Авторизация с использованием ключей — более удобный способ выполнять вход в систему, вы можете раскидать свой ключ на множество систем и выполнять вход на них без использования пароля, когда у вас много машин это становится невероятно удобным. Для тестов нам необходимо иметь минимум 2 машины, одна рабочая, на которой мы будем гереировать ключи и выполнять вход на удаленные машины, а вторая целевая, на которую будет выполняться вход в систему по ssh
Для того чтобы выполнить ssh авторизацию по ключу, необходимо выполнить 3 действия:
1) Сгенерировать ssh ключ закрытый ключ и сертификат ( открытый ключ )
2) Разрешить на удаленной машине выход по ключу
3) Положить на целевую машину открытый ключ

Для тестов используется имя пользователя: user

Создаем директорию для ключей
mkdir -p /home/user/.ssh
Генерируем ключи SSH

для этого существует утилита ssh-keygen

ssh-keygen -t rsa -b 1024 -f /home/user/.ssh/id_rsa

Где:
ssh-keygen -утилита для генерации ключа
-t — ключ утилиты отвечающий за тип генерируемого ключа
rsa -тип ключа бывает rsa/dsa
-b -ключ через который указывается длина ключа в bit
1024 — длина ключа, для тестов хватит и 1024 для большей безопасности указываем 2048, более длинный ключ вызывает большою нагрузку на процессор шифровака/дешифровка данных
-f -параметр указывает куда положить ключ
/home/user/.ssh/id_dsa -путь куда положить ключ

В результате в директории /home/user/.ssh/ у нас появилось 2 файла:

id_rsa id_rsa.pub

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

Настраиваем целевую машину

Настраиваем машину на которую будем выполнять вход по ключу, тут необходимо выполнить 3 действия:
1) Настроить SSH сервер
2) Создать директорию для ключей в домашней директории пользователя
3) Положить на машину открытый ключ

1 — Настраиваем SSH сервер
sudo nano /etc/ssh/sshd_config

В конфиге нас интересует строки, по умолчанию они закомментированы с них необходимо снять комментарии и перевести значения этих параметров в yes если это не сделано за вас:

RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys

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

sudo service ssh restart
2- Создаем директорию для ключей

в домашней директории пользователя создаем директорию .ssh

mkdir /home/user/.ssh

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

3 — Добавляем на целевую машину открытый ключ

В созданной директории .ssh нам необходимо создать файл с отрытым ключом

nano /home/user/.ssh/authorized_keys

Нам необходимо записать в него содержимое файла из id_rsa.pub который у нас получился при генерации ключей на рабочей машине
Права доступа к файлу authorized_keys должны позволять читать содержимое пользователю user

Проверяем работу

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

ssh ip__целевой_машины

Должно произойти подключение
Если на рабочей системе вы работаете под пользователем имя которого на целевой машине отличается от имени пользователя на рабочей машине, например:
Вы работаете под пользователем superuser, но на целевой машине вы работаете под пользователем user, тогда команда подключения будет иметь вид:

ssh user@ip__целевой_машины

Ну а если на целевой машине ssh сервер работает не на стандартном порту 22, а для примера, 9999, то команда подключения принимает вид:

ssh user@ip__целевой_машины -p 9999

На этом все!
Возникли вопросы, прошу в комментарии, нашли ошибку, то пишите в чилку или на email, его можно найти в нижнем левом углу страницы.

10 комментариев

Не совсем понял про файлы

id_rsa
id_rsa.pub

Это файлы с закрытым и открытым ключами. Хорошо. Ключ там только один? То есть для разных ключей нужно создавать разные файлы? Или все ключи можно сохранять в один и тот же файл?

Да ключ один, в файле id_rsa.pub содержится сертификат, если вы хотите разрешить пользователю заходить в систему по нескольким ключам, например один ключ для входа с работы, второй для входа из дома, то содержимое файлов с расширением *.pub необходимо добавить в файл:

/home/user/.ssh/authorized_keys

скопировать точно также, начиная содержимое каждого файла с новой строки

Спасибо за статью, но всё же она неполная.
С одной стороны, Вы описываете простые вещи с простыми шагами, очевидно для новичков, но с другой стороны не описываете остальные шаги. А именно:
— каким образом задаём права на файл с открытым ключом (т.е. обезопасиваем его от доступа другим пользователям);
— каким образом копируем открытый ключ на сам сервер и затем в файл authorized_keys (кстати, он может быть любой, всё зависит от конфига ssh-сервера);
— не до конца раскрыт конфиг ssh-сервера (почему не убрали авторизацию по паролю? Ведь смысл ключа не только в удобстве).
Также не согласен с формулировкой «более длинный ключ вызывает большою нагрузку на процессор шифровака/дешифровка данных», там где рассказывает про генерацию ключа. Длина ключа по сути является эдакой длиной пароля и всё. Чем он длиннее, тем сложнее его взломать. К шифрованию самого ssh соединения и нагрузке на процессор не имеет никакого отношения.

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

Спасибо за ответ.
Всё же я поясню, что, в том числе, я имел ввиду по поводу защиты ключа соответствующими правами. Допустим кто-то, кто также имеет доступ до сервера по своему ключу, каким-либо образом случайно (по глупости или потому что его приватный ключ был скомпрометирован) или намеренно (ака злой умысел) удалит или изменит Ваш публичный ключ так, что Вы больше не сможете подключаться к серверу. Особенно это опасно и возможно, когда у Вас нет физического доступа до сервера, а также отключен доступ по логину/паролю. Примеров можно накидать ещё, просто это самый первый, который пришёл в голову.
Насчёт fail2ban согласен, это самое простое и известное решение защиты, но его недостаток в том, что работает на основе логов, в которых отражаются попытки доступа. Т.е. просто читает их, и исходя из появления нужных уведомлений в них и правил в конфиге самого fail2ban, выполняет соответствующие действия по бану/блокировке.
И хочу уточнить, я сейчас не спора ради, а просто объяснил причину своих вопросов.

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

Допустим, Вам необходимо настроить беспарольный вход по SSH, SCP или SFTP на удаленный сервер remote.org.ua под пользователем user. Если имя Вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить.

Создание SSH-ключей

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

$ mkdir ~/.ssh

1) Cоздаем открытый и закрытый ключ нашей локальной системы:

$ ssh-keygen -t rsa -q -N '' -f ~/.ssh/id_rsa

Подробнее о ключах можете посмотреть с помощью команды:

$ ssh-keygen --help

2) Если в системе есть программа ssh-copy-id, то настраиваем удаленную систему на то, чтобы она авторизовывала SSH по открытому ключу:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote.org.ua

переходим к шагу 4

3) Если ssh-copy-id нет, то можно сделать это вручную.

Вот последовательность действий:

3.1) копируем открытый ключ на удаленную систему:

$ scp ~/.ssh/id_rsa.pub user@remote.org.ua:~

3.2) Авторизуемся на удаленном сервере:

$ ssh user@remoute.org.ua

3.3) Заносим открытый ключ нашей локальный системы в авторизованные ключи удаленной системы, устанавливаем правильные права и «убираем за собой мусор»:

remote$ [ -d ~/.ssh ] || (mkdir ~/.ssh; chmod 711 ~/.ssh) # создаем директорию и даём права remote$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys # добавляем открытый ключ remote$ chmod 600 ~/.ssh/authorized_keys # делаем правильные права remote$ rm ~/id_rsa.pub # удаляем не нужное

4) Проверяем, что все работает, запускаем на локальном компьютере:

$ ssh user@remoute.org.ua

Пример автоматического подключения из Windows через Putty и PuTTYgen

Для начала скачаем с официального сайта обе утилиты отсюда.

еперь утилитой PuTTYgen сгенерируем публичный и приватный ключ. Открываем утилиту и нажимаем Generate:

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

По окончании процесса генерации, утилита предоставит Вам сгенерированный приватный и публичный ключ. Публичный, который обведен красным прямоугольником, нужно занести в файл authorized_keys, который находится в папке .ssh корне Вашего аккаунта на сервере, а приватный ключ сохраняем себе на компьютер. Для этого нажимаем на кнопку Save private key. Учтите, что приватный ключ нельзя ни показывать, ни передавать, иначе смысл безопасного подключения теряется.

Сейчас скопируем публичный ключ в файл .ssh/authorized_keys находящийся на Вашем аккаунте. Для этого открываем утилиту Putty:

Вводим логин пользователя (он совпадает с именем от личного кабинета):

После ввода пароля видим, что нас вежливо приветствует система:

Отлично, ключ добавлен! Теперь проверим нашу беспарольную аутентификацию. Для этого открываем еще раз Putty, переходим во вкладку Auth затем нажимаем на Browse, выбираем наш приватный ключ, который мы сгенерировали и сохранили себе:

Теперь перемещаемся во вкладку Session и, также как ранее, вводим адрес нашего сервера, в нашем случае — это matrix.beget.com затем нажимаем Open:

Теперь вводим логин пользователя, который совпадает с логином от входа в личный кабинет, в нашем случае — denia0d3. Дальше жмем Enter:

После этого мы попали на сервер, заметьте, БЕЗ ввода пароля, что достаточно удобно при частых подключениях:

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел «Помощь и поддержка».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *