Сгенерировать открытый/закрытый SSH ключ в Unix/Linux

Подключение к серверу может быть различным, но одно из самых безопастных — это использования закрытого/открытого SSH-ключа, т.к при этом по сети не передается никакой пароль и система устойчива к атакам методом «грубой силы». Ничего нового я в этой теме не опишу, но для новичков — будет полезно. Та  вообще, в качестве заметке — может пригодится кому-то.

Сгенерировать открытый/закрытый SSH ключ в Unix/Linux

Имеется 2 основных технологии по шифрованию ключей:

  • RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.
  • DSA (англ. Digital Signature Algorithm — алгоритм цифровой подписи) — криптографический алгоритм с использованием открытого ключа для создания электронной подписи, но не для шифрования (в отличие от RSA и схемы Эль-Гамаля). Подпись создается секретно, но может быть публично проверена. Это означает, что только один субъект может создать подпись сообщения, но любой может проверить её корректность. Алгоритм основан на вычислительной сложности взятия логарифмов в конечных полях.
  • ecdsa -новый алгоритм цифровой подписи (DSA), разработанный правительством США с использованием эллиптических кривых. Вероятно, это хороший алгоритм для текущих приложений. Поддерживаются только три размера ключа: бит 256, 384 и 521. Мы рекомендуем всегда использовать его с 521 битом.
  • ed25519 — это новый алгоритм, добавленный в OpenSSH. Поддержка этого в клиентах еще не является универсальной. Таким образом, его использование в приложениях общего назначения, возможно, еще не рекомендуется.

Есть много споров насчет того, что более секурнее, DSA или RSA. Но выбор по использованию за вами.

Генерация открытого/закрытого SSH ключ с RSA шифрованием в Unix/Linux

Откройте терминал. Введите:

$ ssh-keygen -t rsa

Он сгенерирует ключ и положит в стандартную папку (~/.ssh). Можно указать какую битность использовать:

$·ssh-keygen -t rsa -b 4096

Для более удобного использования, я создам файл с именем котороя я задам сам, например:

$ ssh-keygen -t rsa -b 4096 -C "shared_L1_team_acc" -f ~/.ssh/l1_key

Как-то так.

Генерация открытого/закрытого SSH ключ с DSA шифрованием в Unix/Linux

Альтернативой является использование для создания ключа технологии DSA (Digital Signing Algorithm):

$ ssh-keygen -t dsa

Он сгенерирует ключ и положит в стандартную папку (~/.ssh). Можно указать какую битность использовать:

$ ssh-keygen -t dsa -b 4096

Для более удобного использования, я создам файл с именем котороя я задам сам, например:

$ ssh-keygen -t dsa -b 4096 -C "shared_L1_team_acc" -f ~/.ssh/l1_key

Как-то так.

Генерация открытого/закрытого SSH ключ с ecdsa шифрованием в Unix/Linux

И так, чтобе заюзать данный тип шифрования, можно выполнить:

# ssh-keygen -t ecdsa -b 521

И опять таки, можно заюзать:

# ssh-keygen -t ecdsa -b 521 -f test_ecdsa_key

Идем дальше…

Генерация открытого/закрытого SSH ключ с ed25519 шифрованием в Unix/Linux

И так, чтобе заюзать данный тип шифрования, можно выполнить:

# ssh-keygen -t ed25519 -b 521

И опять таки, можно заюзать:

# ssh-keygen -t ed25519 -b 521 -f test_ed25519_key

Идем дальше…

Использование открытого/закрытого SSH ключа в Unix/Linux

Чтобы посмотреть содержание ключа, используйте:

$ cat ~/.ssh/l1_key.pub

И получите что-то типа:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC9raaaCmx9CvnAr8ffiODwocbkmmgvIG64AAwGkCDE0iaz0Xl3BJg98+WM8W0IAbNXMPdxjsRbhpUBWb966vsZ0u/ZYdreUOyOgFKLb5nnGh7qC1Sbv8Yp0MvC1M7g/BQimnG1UHv5C0iZDdxlP7Sj9H5Mwf1rpfQCd95j9nWcpJBgrZxvaRhNS+EA5nrg0BtebkznHdWe4f84sUzAWsZZNcd//V5aIF5f5pSHyzCrcMXPppLWOoUJ+xlAj9AUJ74AxGVmlh4au2LHDCpYKAnXpzV5+hy9E8yMGl44Sa3fDHwWX5p3a9r8LdKlYIYVAo3HQsS2Fqw7/m3qmo2+hDvurJWWJUCeQQFL/5MuIN4QS/xUdXutegQImT5ikrEIakSS8NIzaj6ZjpHR+fbl/WdO7/UhoIJYPHjQ7fSVOuMaz5+ZjRZK7QFdG2QXubUUkh1NdI+31T2vZlvAhyMtxMSzj5m014gvPPwPRNiBqwSvHKEe2trA8/bIVgme34YkLhUA58Pqzgc7GHRzwty11ejywZdxonwivX3UCAPcD/95xuIeHcF5OO8y4bWABHvTvdkmB/3RV5S5vkxATqdqqM5+QrUyEzePERgZzKcj+gRqDIozMrVh1jSiX2lwtutJ1iU0YrRhVVph9BJLmcewqb+yDv5eJT+luNNvQy6AvXzuiw== shared_L1_team_acc

На mac OS X имеется функция которая позволяет копировать в буфер, например:

$ cat ~/.ssh/l1_key.pub| pbcopy

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

$ ssh-copy-id -i ~/.ssh/YOUR_KEY YOUR_USER@YOUR_HOST

Где:

  • YOUR_KEY — Ваш сгенерированный ключ.
  • YOUR_USER — Ваш пользователь на удаленной машине.
  • YOUR_HOST — Ваш хост на удаленной машине.

Должен появиться файл:

$ ls -alh ~/.ssh/l1_key.pub

И, добавим содержание ключа в:

$ cat·~/.ssh/l1_key.pub >>·~/.ssh/authorized_keys

Или если используется ~/.ssh/authorized_keys2, то применяем аналогичные действия:

$ cat·~/.ssh/l1_key.pub >>·~/.ssh/authorized_keys2

PS: Можно еще одной командой выполнить ряд аналогичных действий:

# cat ~/.ssh/YOUR_KEY.pub | ssh YOUR_USER@YOUR_HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Осталось уже долго, идем дальше….

Изменение ssh_config

В зависимости от Unix/Linux ОС, ssh_config может лежать в разным местах.

Пример файла в Debian/Ubuntu:

# vim·/etc/ssh/ssh_config

Пример файла в Redhat/Fedora/Centos:

# vim·/etc/ssh/sshd_config

Примерный вывод:

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
GSSAPICleanupCredentials yes
X11Forwarding yes
UseLogin no
AllowUsers captain root
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem	sftp	/usr/libexec/openssh/sftp-server

В данном конфиге (я имею ввиду по этой теме), нас интересует следующие строки:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

После того как привели к такому виду, перезапускаем ssh:

# service sshd restart

Подключаемся к удаленному серверу:

$ ssh -i·l1_key your_username@your_host_ip

Вот еще полезное чтиво:

Сгенерировать public SSH ключ из private SSH ключа в Unix/Linux

Открыть порт ssh по стуку с IPtables в Unix/Linux

Запустить команды через SSH в Unix/Linux

Переход в другую директорию при SSH соединении в Unix/Linux

Поменять SSH Port 22 в Unix/Linux

Безопасный SSH с Google Authenticator в Unix/Linux

Поменять пароль приватного RSA ключа для SSH в Unix/Linux

Сконвертировать OpenSSH в SSH2 и наоборот в Unix/Linux

Запретить/Разрешить доступ для пользователей и групп в OpenSSH

Другие темы можно найти на сайте 

Сгенерировать public SSH ключ из private SSH ключа в Unix/Linux

Иногда, на серверах (ну бывает так), теряются публичные ключи. Учитывая что приватный ключ лежит у вас, то с легкостью можно сгенерировать новый.

А делается это следующим образов:

# ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

После чего, вы получаете открытый ключ.

Источник: https://linux-notes.org/

Was this helpful?

0 / 0