SSH — безопасная оболочка, позволяющая получит удаленный доступ к серверам. Вы получаете доступ к полному управлению. Большую часть настройки сервера вы будете проводить из терминала, подключенного именно через ssh.
В статье мы расскажем как настроить ssh, как генерировать ключи и как их практически использовать.
Для начала произведем генерацию ключей на своей рабочей станции, под управлением операционной системой linux. Открываем терминал и вводим:
1 |
ssh-keygen |
Данной командой мы со создадим 2048 битные ключи RSA, которые достаточно безопасны. Так же существует возможность генерировать ключи большей битности. Допустим мы хотим создать 4096 биные ключи, то команда уже будет выглядеть немного иначе.
1 |
ssh-keygen -b 4096 |
Как мы видим добавился ключ -b, а так же битность мы указали вручную.
Вывод команды будет следующим:
1 2 |
Generating public/private rsa key pair. Enter file in which to save the key (/user/.ssh/id_rsa): |
/user/.ssh/id_rsa путь расположения ключей, по умолчанию. Вы можете сохранить ключи по данному пути, или вписать другой путь и нажать enter.
Если вы уже ранее генерировали пару ключей, то вывод команды будет выглядеть следующим образом:
1 2 |
/home/user/.ssh/id_rsa already exists. Overwrite (y/n)? |
Будет предложено перезаписать данную пару. Для перезаписи вводим y и нажимает enter. Если вы перезапишите, то не сможете использовать ранее сгенерированные ключи, так как они перезапишутся. Будьте очень аккуратны с перезаписью, процесс не обратим.
После одного из возможных сценариев, будет предложено ввести ключевую фразу:
1 |
Enter passphrase (empty for no passphrase): |
Вводить или не вводить ключевую фразу вы решаете для себя. Ключевая фраза добавляет еще один уровень защиты. Если вы не хотите вводить ключевую фразу, то просто нажмите enter.
Произойдет процесс генерации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Output Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+ |
По завершении мы получим публичный и секретный ключи, которые и будут использоваться для аутенфикации на сервере. Затем копируем ключи одним из способов.
Копирование при помощи ssh-copy-id
Данный способ очень прост, поэтому он рекомендуется в первую очередь. Если вы по какой либо причине не можете использовать данный способ, то ниже будут представлены другие способы копирования ключей.
Команда копирования ключей:
1 |
ssh-copy-id username@remote_host |
username — имя пользователя удаленной машины, remote_host — ip адрес удаленной машины. При первом подключении вы можете увидеть:
1 2 3 |
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes |
Что говорит о том, что ваша локальная машина не узнала удаленную, и предлагается продолжить соединение, вводим yes и нажимаем enter. Затем утилита начнет поиск ключа, созданного ранее, в вашей домашней директории. При успешном обнаружении будет запрошен пароль, для входа на удаленный сервер.
1 2 3 |
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password: |
После ввода пароля нажимаем enter, произойдет авторизация и будет скопировано содержимое публичного ключа, расположенного в
~/.ssh/id_rsa.pub в файл ~/.ssh/id_rsa.pub в поддиректории ~/.ssh домашней директории вашего пользователя на удалённом сервере.
Вывод будет таким:
1 2 3 4 |
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@ip-address'" and check to make sure that only the key(s) you wanted were added. |
Процедура копирования закончена.
Копирование публичного ключа через SSH
Бывает так, что утилита ssh-copy-id отсутствует, а ключи копировать надо. Можно загрузить ключи вручную.
Сделать это можно введя длинную команду:
1 |
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys" |
Утилита cat прочитает файл ключей, далее мы создаем ssh подключение, где вместо username указываем имя пользователя, а вместо remote_host ip адрес сервера. Затем даем удаленному серверу команду создать папку в домашнем каталоге. Далее командой touch создаем файл, затем меняем права на папку и копируем содержимое.
Если вы подключаетесь впервые, то вывод будет таким же как в способе выше, потребуется ввести yes и нажать enter.
Ручной способ копирования
Данный способ подойдет в том случае если у вас нет ssh доступа к серверу. Придется вручную добавить содержание файла ключей на сервер. Для просмотра файла ключей используем cat:
1 |
cat ~/.ssh/id_rsa.pub |
Содержимое будет примерно таким:
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test |
Заходим на удаленную машину, любым доступным способом.
Вводим:
1 |
mkdir -p ~/.ssh |
Данной командой мы проверяем на наличие папки, и если она отсутствует, то она будет создана.
Далее переходим к созданию или редактированию файла
authorized_keys.
Создание данного файла и внесение в него значения ключей:
1 |
echo "значение_публичного_ключа" >> ~/.ssh/authorized_keys |
Подставляем значение публичного ключа и нажимаем enter. Затем изменим права:
1 |
chmod -R go= ~/.ssh |
Если файл создается от имени пользователя root, то придется изменить владельца:
1 |
chown -R user:user ~/.ssh |
Вместо user подставляем имя пользователя в домашней папке которого создали файл ключей.
Процесс входа на удаленный сервер после копирования ключей будет выглядеть так:
1 |
ssh username@remote_host |