Ключи ssh
2022-02-17
·
5 мин. для прочтения
Создание и работа с ключами 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).
 
7 Явное указание ключа ssh
7.1 Возможная проблема
- При попытке подключения к нужному узлу по SSH в терминал выводится сообщение об ошибке:
Received disconnect from <HOST> port 22:2: Too many authentication failures Disconnected from <HOST> port 22 - Это сообщение говорит о том, что вы превысили количество неудачных подключений к узлу.
 - Такое также возможно, когда у вас много ключей ssh:
- Если в настройках подключения не указано, какой ключ использовать, агент SSH начинает перебирать все доступные ключи.
 - Получив отказ при попытке подключения с одним узлом, агент пробует подключиться со следующим.
 - Примерно после 6 попыток сервер ssh на удалённом узле блокирует подключение.
 
 - Рекомендуется явное указать ключ ssh.
 
7.2 Командная строка
- В аргументах команды SSH можно явно задать путь к приватному ключу, который нужно использовать при подключении:
ssh <user>@<host> -i /path/to/private/key - В этом случае перебора не происходит.
 
7.3 Файл настроек
- Можно задать ключ в файле настроек.
 - Создайте в каталоге 
~/.ssh/файлconfig:touch ~/.ssh/config - Добавьте в файл 
~/.ssh/configнастройки подключения к нужным узлам:Host <name> Hostname <host> IdentityFile ~/.ssh/<private_key> IdentitiesOnly yes