Ключи ssh
2022-02-17
·
4 мин. для прочтения
Создание и работа с ключами 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
- по алгоритму rsa с ключём размером 4096 бит:
- При создании ключа команда попросит ввести любую ключевую фразу для более надёжной защиты вашего пароля. Можно пропустить этот этап, нажав
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"
6 Настройка ключей
- Для совместимости необходимо настроить разные типы ключей (см. Тип ключа ssh).