Ключи ssh

Создание и работа с ключами ssh.

Содержание

1 Алгоритмы шифрования ssh

1.1 Аутентификация

В SSH поддерживается четыре алгоритма аутентификации по открытым ключам:

  • DSA,
    • размер ключей DSA не может превышать 1024, его следует отключить
  • RSA
    • следует создавать ключ большого размера: 4096 бит
  • ECDSA
    • ECDSA завязан на технологиях NIST, его следует отключить
  • Ed25519
    • используется пока не везде

1.1.1 Отключение ключей у сервера sshd

  • Ключи отключаются у сервера.
  • Если просто удалить ключ, он будет повторно создан при перезапуске демона.
    • Можно воспользоваться обходным путём с создать заведомо нерабочую символическую ссылку, которая помешает создать и использовать ключ:
      cd /etc/ssh
      rm ssh_host_ecdsa_key*
      ln -s ssh_host_ecdsa_key ssh_host_ecdsa_key
      
      rm ssh_host_dsa_key*
      ln -s ssh_host_dsa_key ssh_host_dsa_key
      
      rm ssh_host_key*
      ln -s ssh_host_key ssh_host_key
      

1.1.2 Создание серверных ключей

  • Для RSA следует создать ключ большего размера:
    cd /etc/ssh
    rm ssh_host_rsa_key*
    ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null
    

1.1.3 Создание клиентских ключей

  • Для создания клиентских ключей лучше использовать команды:
    ssh-keygen -t ed25519
    ssh-keygen -t rsa -b 4096
    

1.2 Симметричные шифры

  • Из 15 поддерживаемых в SSH алгоритмов симметричного шифрования, безопасными можно считать:
    • chacha20-poly1305;
    • aes*-ctr;
    • aes*-gcm.
  • Шифры 3des-cbc и arcfour потенциально уязвимы в силу использования DES и RC4.
  • Шифр cast128-cbc применяет слишком короткий размер блока (64 бит).

1.2.1 Конфигурация сервера

  • В /etc/ssh/sshd_config рекомендуется добавить:
    Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
    

1.2.2 Конфигурация для клиентов

  • В /etc/ssh/ssh_config рекомендуется добавить:
    Host *
       Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
    

1.3 Обмен ключами

  • Применяемые в SSH методы обмена ключей DH (Diffie-Hellman) и ECDH (Elliptic Curve Diffie-Hellman) можно считать безопасными.
  • Из 8 поддерживаемых в SSH протоколов обмена ключами вызывают подозрения три, основанные на рекомендациях NIST:
    • ecdh-sha2-nistp256;
    • ecdh-sha2-nistp384;
    • ecdh-sha2-nistp521.
  • Не стоит использовать протоколы, основанные на SHA1.

1.3.1 Настройка сервера

  • В /etc/ssh/sshd_config рекомендуется указать:
    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
    

1.3.2 Настройка клиента

  • В /etc/ssh/ssh_config рекомендуется добавить
    Host *
       KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
    

2 Файлы ssh-ключей

  • По умолчанию пользовательские ssh-ключи сохраняются в каталоге ~/.ssh в домашнем каталоге пользователя.

  • Убедитесь, что у вас ещё нет ключа.

  • Файлы закрытых ключей имеют названия типа id_<алгоритм> (например, id_dsa, id_rsa).

    • По умолчанию закрытые ключи имеют имена:
      id_dsa
      id_ecdsa
      id_ed25519
      id_rsa
      
  • Открытые ключи имеют дополнительные расширения .pub.

    • По умолчанию публичные ключи имеют имена:
      id_dsa.pub
      id_ecdsa.pub
      id_ed25519.pub
      id_rsa.pub
      

3 Создание ключа ssh

  • Ключ ssh создаётся командой:
    ssh-keygen -t <алгоритм>
    
  • Создайте ключи:
    • по алгоритму rsa с ключём размером 4096 бит:
      ssh-keygen -t rsa -b 4096
      
    • по алгоритму ed25519:
      ssh-keygen -t ed25519
      
  • При создании ключа команда попросит ввести любую ключевую фразу для более надёжной защиты вашего пароля. Можно пропустить этот этап, нажав Enter.
  • Сменить пароль на ключ можно с помощью команды:
    ssh-keygen -p
    

4 Добавление SSH-ключа в учётную запись GitHub

  • Скопируйте созданный SSH-ключ в буфер обмена командой:
    xclip -i < ~/.ssh/id_ed25519.pub
    
  • Откройте настройки своего аккаунта на GitHub и перейдем в раздел SSH and GPC keys.
  • Нажмите кнопку New SSH key.
  • Добавьте в поле Title название этого ключа, например, ed25519@<hostname>.
  • Вставьте из буфера обмена в поле Key ключ.
  • Нажмите кнопку Add SSH key.

5 Аутентификации на базе ключей SSH

  • При аутентификации по ключу можно войти на удалённый хост без пароля учетной записи для удаленного хоста.
  • На удалённом хосте для сервера ssh долен быть настроен вход по ключу:
    # Should we allow Pubkey (SSH version 2) authentication?
    PubkeyAuthentication yes
    
    # Where do we look for authorized public keys?
    # If it doesn't start with a slash, then it is
    # relative to the user's home directory
    AuthorizedKeysFile    .ssh/authorized_keys
    

5.1 Копирование открытого ключа на удалённый хост с использованием ssh-copy-id

  • Скопируйте на удалённый хост открытый ключ:
    ssh-copy-id username@remote_host
    

5.2 Копирование открытого ключа с помощью SSH

  • Можно загрузить на удалённый хост ключи с помощью стандартного метода SSH:
    cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры прикладной информатики и теории вероятностей

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие