Генерация RSA, ECDSA, EdDSA ключей. Настройка доступа к серверу по SSH ключу

Категория: Linux

Настройка доступа к удаленному серверу по SSH  ключам RSA, ECDSA, EdDSA.

Добавление алиаса в ~/.ssh/config для простого подключения к серверу по заданным настройкам.

Выбирая между RSA 2048/4096 и Ed25519 ключами - это компромисс между производительностью и совместимостью.
У RSA полная поддержка ssh-клиентами, в то время как EdDSA работает намного быстрее и обеспечивает тот же уровень безопасности с ключами значительно меньшего размера.
Пока стойкость ключа достаточно хороша, можно использовать ключ любого алгоритма.

Используйте ключи с новыми алгоритмами ECDSA, EdDSA (Ed25519)!

Ключи RSA/DSA устаревают. Github перестал поддерживать RSA/DSA ключи. Используйте ключи ECDSA, EdDSA.

Генерация своего основного ключа без пароля (no passphrase, опция: -N ""):

ssh-keygen -t ecdsa -b 521 -N "" -C "you@email"
ssh-keygen -t ed25519 -N "" -C "you@email"

Генерация дополнительного ключа для сервиса:

ssh-keygen -t ecdsa -b 521 -q -N "" -C "service,user" -f ~/.ssh/id_ecdsa_service_user
ssh-keygen -t ed25519 -q -N "" -C "service,user" -f ~/.ssh/id_ed25519_service_user

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

Генерация ключей и настройка доступа к серверу по SSH:

  1. Генерируем пару RSA ключей (без ввода passphrase):
    Можете пропустить этот шаг и использовать уже существующие ключи.. Ключи нужно искать в каталоге ~/.ssh/
    Обычно они называются id_rsa и публичный (который можно показывать) - id_rsa.pub.
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_servicename -C "key description" -q -N ""
  2. Отправляем публичный ключ на сервер:
    ssh-copy-id -i ~/.ssh/id_rsa_servicename.pub -o PubkeyAuthentication=no '-p 22 user@X.X.X.X'
    Если не получается скопировать публичный ключ по ssh-copy-id.
    Копируем публичный ключ на сервер вручную, если не получается скопировать с помощью ssh-copy-id.
    Заходим на сервер по паролю:
    ssh -o PubkeyAuthentication=no user:password@X.X.X.X
    Добавляем строку с содержимым файла публичного ключа id_rsa_servicename.pub в файл /home/user/.ssh/authorized_keys:
    mkdir ~/.ssh
    chmod -R 755 ~/.ssh/
    nano .ssh/authorized_keys
    # добавьте свой .pub ключ и сохраните файл Ctrl+O, Ctrl+X
    chmod 644 .ssh/authorized_keys

ssh_config

Если у вас несколько ssh-ключей для авторизации на разных серверах/сервисах - можно связать ключи с хостами в файле ~/.ssh/config

Пример настройки конфига ~/.ssh/config:

host server-alias
  Hostname X.X.X.X
  Port 22
  User USERNAME
  IdentityFile ~/.ssh/id_rsa_servicename
  #RemoteCommand cd /var/www/2ip.fun/; exec bash --login
  RemoteCommand cd /var/www/; $SHELL -il
  RequestTTY yes


Примечание

Удаления с локалки ранее принятого "серверного ключа" из файла ~/.ssh/known_hosts:

ssh-keygen -R server.domain
ssh-keygen -R X.X.X.X

Также нужно очистить и ключ для IP.

"Серверный ключ" хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub.

Внимание!

Если настраиваете ssh-сервер - меняйте дефолтный 22 порт:

sed -Ei 's|^#?Port [0-9]+|Port XXXX|g' /etc/ssh/sshd_config; grep ^Port /etc/ssh/sshd_config; sudo systemctl restart sshd

#linux #ubuntu #ssh #lamp #ssh-keygen #rsa #dsa

категория: Linux