Ключи 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