Подключение к серверу может быть различным, но одно из самых безопастных — это использования закрытого/открытого 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