ssh. Генерация и установка ключа

SSH может авторизоваться не по паролю, а по ключу. Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются (утрированно) и если всё ок — пускают. Важно: авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом (та самая криптографическая магия).


Генерация ключа

  • Генерация ключа:
ssh-keygen -t rsa

Вывод команды:

 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 

Нажать на ENTER

Ввод пароля (если хотите входить без пароля, то нажать ENTER)

Enter passphrase (empty for no passphrase): 

Ввести пароль еще раз (если без пароля то нажать ENTER)

Enter same passphrase again: 

Общий вывод команды:

pavel@debian:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pavel/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pavel/.ssh/id_rsa.
Your public key has been saved in /home/pavel/.ssh/id_rsa.pub.
The key fingerprint is:
c1:70:c3:6f:92:62:94:f7:e4:c2:da:c2:61:0c:af:db pavel@debian
The key's randomart image is:
+--[ RSA 2048]----+
|      .+o        |
|    . ++o.       |
|     * ++o       |
|      X =.o      |
|     B =So       |
|    o ++         |
|     o           |
|    . E          |
|                 |
+-----------------+
  • Смена существующего пароля:
ssh-keygen -p

Структура ключа

~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать. Если вы в письмо/чат скопипастите его вместо pub, то нужно генерировать новый ключ.


Установка ключа на сервер

  • При помощи утилиты ssh-copy-id :
ssh-copy-id user@192.168.0.100

user - имя пользователя 192.168.0.100 - адрес сервера

Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе:

ssh-copy-id '-p 2200 user@192.168.0.100'
  • Добавление ключа вручную

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

~/.ssh/authorized_keys

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

Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе ssh его не примет.

В ключе последнее поле — user@machine. Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.

Старые руководства по ssh упоминают про authorized_keys2. Причина: была первая версия ssh, потом стала вторая (текущая), для неё сделали свой набор конфигов, всех это очень утомило, и вторая версия уже давным давно переключилась на версии без всяких «2». То есть всегда authorized_keys и не думать о разных версиях.

Теперь для входя на сервер можно воспользоваться командой:

ssh 'user@192.168.0.100'

Ключ сервера

Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл

~/.ssh/known_hosts

Узнать, где какой ключ нельзя (ибо несекьюрно).

Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа. Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.0.100, которых в мире несколько миллионов).

  • Удалить известный ключ сервера можно командой
ssh-keygen -R server
  • При этом нужно удалить ещё и ключ IP (они хранятся раздельно):
ssh-keygen -R 192.168.0.100

Ключи сервера хранятся в следующих файлах соответственно:

/etc/ssh/ssh_host_rsa_key 
/etc/ssh/ssh_host_rsa_key.pub
  • Их можно:
  1. скопировать со старого сервера на новый.
  2. сгенерировать с помощью ssh-keygen . Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.

Заметим, если вы сервера клонируете (например, в виртуалках), то ssh-ключи сервера нужно обязательно перегенерировать.

Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.


  • ssh._generacija_i_ustanovka_kljucha.txt
  • Последние изменения: 2016/01/27 00:00
  • (внешнее изменение)