Темы
Изменение параметров SSH
О ключах
SSH-ключи на Windows
SSH-ключи на *nix
Agent ssh
Манипуляции с ключами
В системе FreeBSD для внесения изменений в конфигурацию сервера SSH рекомендуется использовать флаги для демона sshd. Произведём минимально достаточную настройку с использованием следующих параметров:
Код: Выделить всё
sshd_flags="-o PermitRootLogin=yes -o PasswordAuthentication=no -o UseDNS=no"PasswordAuthentication - Авторизация по паролю
UseDNS - Если в сети есть настроенный DNS-сервер с обратной зоной, то можно разрешить демону SSH резолвить IP в имена. Для этого раскомментируем строку UseDNS и меняем значение на "yes"
Рекомендуемый способ изменения настроек демона SSH является применение опции sshd_flags в файле /etc/rc.conf. Крайне не рекомендую изменять опции в файле настроек демона SSH /etc/ssh/sshd_config
Затем перезапускаем службу
Код: Выделить всё
service sshd reloadКлюч состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер.
- хост с которого подключаемся => приватный ключ => rsa.ppk => .ssh/config или ssh-agent
- хост к которому подключаемся => публичный ключ => rsa.pub => .ssh/authorized_keys
Типы ключей
RSA
RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других
DSA
DSA (англ. Digital Signature Algorithm - алгоритм цифровой подписи) — криптографический алгоритм с использованием открытого ключа для создания электронной подписи, но не для шифрования (в отличие от RSA и схемы Эль-Гамаля). Подпись создается секретно, но может быть публично проверена. Это означает, что только один субъект может создать подпись сообщения, но любой может проверить её корректность. Алгоритм основан на вычислительной сложности взятия логарифмов в конечных полях.DSA лучше в плане производительности
ECDSA
Алгоритм цифровой подписи эллиптической кривой (ECDSA) был введен в качестве предпочтительного алгоритма аутентификации в OpenSSH 5.7. Некоторые поставщики также отключают требуемые реализации из-за потенциальных проблем с патентами. Есть два вида проблем:Политические проблемы", достоверность кривых, подготовленных NIST, ставятся под сомнение после того, как откровения о том, что NSA охотно вставляют бэкдоры в программное обеспечение, аппаратные компоненты и опубликованные стандарты; Известные криптографы высказывали сомнения относительно того, как были разработаны кривые NIST, и добровольное заражение уже было доказано в прошлом.
'Технические проблемы", связанные с трудностью надлежащего внедрения стандарта, а также медлительностью и недостатками дизайна, снижающими безопасность в недостаточно ранних реализациях.
Обе эти проблемы лучше всего изложены в libssh curve25519. Несмотря на то, что политические проблемы все еще обсуждаются, существует четкий консенсус в отношении того, что # Ed25519 технически превосходен и поэтому должен быть предпочтительным.
Ed25519
Ed25519 был представлен в OpenSSH 6.5: «Ed25519 - это схема сигнатур эллиптической кривой, которая обеспечивает лучшую защиту, чем ECDSA и DSA, и хорошую производительность». Его главными достоинствами являются его скорость, время работы с постоянным временем (и сопротивление боковым каналам) и отсутствие туманных жестко заданных констант [8]. См. Также этот пост в блоге разработчиком Mozilla о том, как он работает. Он уже реализован во многих приложениях и библиотеках и является алгоритмом обмена ключами по умолчанию (который отличается от ключевой сигнатуры) в OpenSSH. Публичные ключи имеют постоянную длину — 256 бит, а подпись имеет размер в два раза больше.Некоторые ключевые преимущества Ed25519:
- Высокая скорость: Ed25519 обеспечивает быстрые операции подписи и проверки, что делает её эффективной для использования в системах, требующих высокой производительности.
- Безопасность: Эта схема подписи основана на эллиптической кривой Curve25519, которая была разработана с учетом безопасности. Она предлагает высокий уровень защиты даже против квантовых атак (хотя полностью квантово-устойчивых алгоритмов пока не существует).
- Малый размер ключа: Размер ключа Ed25519 составляет 256 бит, что обеспечивает хороший уровень безопасности с относительно небольшим потреблением ресурсов.
- Устойчивость к атакам: Ed25519 проектировалась с учетом различных классов криптографических атак, включая атаки по времени и атаки на основе анализа канала.
- Простота реализации: Алгоритм относительно прост в реализации и не требует сложных математических операций, что снижает вероятность ошибок в коде.
- Контроль целостности: Подписи, сгенерированные с помощью Ed25519, имеют встроенные механизмы проверки целостности, что делает их более надежными в использовании.
- Читаемость и стандарты: Ed25519 имеет ясные и широко принятые спецификации, что облегчает ее внедрение и использование в различных приложениях и протоколах.
- Эти преимущества делают Ed25519 популярным выбором для односторонней аутентификации, защиты данных и других криптографических приложений.
Однако, у него есть и некоторые недостатки:
- Зависимость от параметров: Ed25519 требует использования заранее определенных параметров, и это может создать проблемы, если необходимо адаптировать алгоритм под неконтролируемые параметры или протоколы.
- Использование фиксированного порядка: Хотя это часто является преимуществом, фиксированный порядок группы может быть недостатком в некоторых специфических приложениях, где может потребоваться большая гибкость.
- Не подходит для всех приложений: В некоторых случаях, таких как системы с ограниченными ресурсами или специфические требования к высокоскоростной обработке данных, может потребоваться альтернативный алгоритм.
- Отсутствие поддержки в устаревших системах: Хотя Ed25519 широко используется, старые системы и программные обеспечения могут не поддерживать его, что создаёт проблемы совместимости.
- Уязвимости при неправильной реализации: Как и любой другой криптографический алгоритм, Ed25519 может быть уязвим к атакам, если он неправильно реализован или не используется соответствующим образом.
- Требования к источникам случайных чисел: Как и многие другие криптографические алгоритмы, Ed25519 зависит от качественных генераторов случайных чисел. Ненадежные источники случайности могут привести к компрометации ключей.
- Качаем отсюда http://www.chiark.greenend.org.uk/~sgta ... nload.html
Код: Выделить всё
putty-0.63-installer.exe- прописываем в переменной Path путь к каталогу с установленной программой
Код: Выделить всё
C:\Program Files (x86)\PuTTY- Запускаем ssh-keygen. Выбираем ключ SSH-2 RSA и длину 2048 бит. Жмем «Generate». Ключ готов, заполняем кодовую фразу и комментарий к нему. Сохраняем приватный ключ как rsa.ppk и публичный как rsa.pub
- Далее необходимо скопировать наш публичный ключ на сервер.
Код: Выделить всё
cd C:\Program Files (x86)\PuTTY
C:\Program Files (x86)\PuTTY>pscp rsa.pub root@srv:rsa.pub- Ключ скопировался, теперь нужно добавить его в /root/.ssh/authorized_keys. Для этого логинимся еще раз по паролю, через putty и выполняем
Код: Выделить всё
ssh-keygen -i -f rsa.pub >> /root/.ssh/authorized_keys
rm rsa.pubЗапуск pageant почти в автоматическом режиме. После ввода парольной фразы запускается Putty с конкретным профилем.
Код: Выделить всё
"C:\Program Files (x86)\PuTTY\pageant" rsa.ppk -c putty.exe -load "srv-195.0.1.1"Код: Выделить всё
login as: root
Authenticating with public key "rsa-key-20080908" from agentДля решения проблемы в настройках putty (Connection / Data / Terminal-type string) нужно поставить putty вместо xterm. Это позволит использовать описание терминала putty, которое уже присутствует в termcap из состава FreeBSD.
Для проверки отсутствия возможности аутентификации по паролю можно воспользоваться дополнительной опцией
Код: Выделить всё
ssh srv92 -o PubkeyAuthentication=noВот пара примеров генерирования ключей с помощью программы ssh-keygen.
Сначала получим пару ключей с алгоритмом RSA:
Код: Выделить всё
ssh-keygen -t RSA -b 2048 -q -N "" -C "user@sergey.free-adm.ru"Возможно, у вас уже есть несколько ключей на устройстве, поэтому вы можете оставить их и просто сгенерировать новый ключ Ed25519.
Таким образом, вы всё ещё сможете заходить на свои удалённые машины, постепенно, один за одним, заменяя на них свои старые
авторизованные ключи своим новым алгоритмом.
Давайте сгенерируем ключи на базе алгоритма ed25519:
Код: Выделить всё
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -q -N "" -C "$HOSTNAME" - -t type: указывает тип создаваемого ключа, в нашем случае это Ed25519 или RSA. ssh-keygen, работает с несколькими типами ключей. Вот некоторые значения:
- RSA 1 - для протокола SSH версии 1.
- RSA - для протокола SSH версии 2.
- DSA - для протокола SSH версии 2.
- ECDSA - введен в качестве предпочтительного алгоритма аутентификации в OpenSSH 5.7.
- -b Длина ключа в битах.
- RSA - минимальная длина, 768 бит, длина ключа по умолчанию, 2048 бит.
- DSA - длина 1024 бита.
- -o : указывает сохранить приватный ключ с использованием нового OpenSSH формата вместо PEM. На самом деле, эта опция по умолчанию включена при генерации ключа Ed25519.
- -a rounds: При сохранении закрытого ключа эта опция задает количество используемых раундов KDF. Большее число раундов приводит к замедлению проверки парольной фразы и повышению устойчивости к взлому пароля методом перебора (если ключи будут украдены). По умолчанию используется 16 раундов.
- -i: Данная опция используется для импорта ключей из одного формата ( например ключи сгенерированные программой PuTTYgen, для Windows ), в формат OpenSSH.
- -f : указывает имя файла для сохранения ключа. Если вы хотите, чтобы ключ подхватывался автоматически вашим SSH-агентом, то он должен быть сохранён в дефолтной директории .ssh домашней директории вашего пользователя.
- -l: Посмотреть отпечаток секретного ключа ( fingerprint ).
- -q: Тихий ssh-keygen.
- -N: Обеспечивает ввод новой ключевой фразы. В "" можно указать парольную фразу, если таковая требуется. Пустые "" означает отсутствие парольной фразы в сгенерированных ключах.
- -p: Обеспечивает ввод (старой) ключевой фразы.
- -C comment : указывает комментарий. Он несёт исключительно информационный смысл и может содержать что угодно. Обычно он заполняется данными <login>@<hostname> того, кто сгенерировал ключ.
Распространение ключей на сервера и сетевые устройства
Копируем публичный ключ на удалённый сервер любым из перечисленных способов. Первый способ предпочтительней, поскольку ssh-copy-id иногда даёт сбои.
Код: Выделить всё
ssh-keygen -i -f id_rsa.pub >> /root/.ssh/authorized_keys
rm id_rsa.pub
или
ssh-copy-id root@srv92Код: Выделить всё
ssh-copy-id -i ~/.ssh/id_rsa.pub root@srv92и файл known_hosts в котором сохраняются отпечатки ключей с именами хостов.
Отладка SSH
Для диагностики проблем на стороне клиента существуют ключи -v и -vv, которые используются для вывода подробностей установки соединения. Параметр -vv выводит более детализированную информацию о ходе подключения.
Код: Выделить всё
ssh -v ( or -vv) ...Код: Выделить всё
sshd -dКод: Выделить всё
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
или
chmod go-w /home/serg/.ssh /home/serg/.ssh/authorized_keysБез лишения прав записи на файл authorized_keys и каталог .ssh для группы и остальных пользователей авторизация по публичному ключу РАБОТАТЬ НЕ БУДЕТ!!!
Использования SFTP
На сервере (с помощью FTP или файлового менеджера контрольной панели) создайте файл ~/.sftp/authorized_keys и поместите в него ваш публичный ключ из файла id_rsa.txt. Установите права 0700 на папку .sftp и 0600 на файл authorized_keys.
чтобы агент запускался автоматически при входе в систему:
Код: Выделить всё
echo 'eval $(ssh-agent)' >> ~/.bash_profileКод: Выделить всё
ssh-add ~/.ssh/main.ppk
ssh-add ~/.ssh/id_routeКод: Выделить всё
echo 'eval $(ssh-agent)' >> /etc/profileКод: Выделить всё
ssh-add -AK ~/.ssh/[your-private-key]Для того чтобы узнать публичный ключ ssh по приватному ключу, можно воспользоваться командой ssh-keygen со следующими параметрами:
Код: Выделить всё
ssh-keygen -y -f /путь/к/приватному_ключуКод: Выделить всё
ssh-add -LКод: Выделить всё
ssh-add -lКод: Выделить всё
ssh-add ~/.ssh/id_rsaНапример, если ваш ключ находится в файле "/path/to/key.pub" и вы хотите отправить его на удаленный хост с IP-адресом "remote_host", выполните следующую команду:
Код: Выделить всё
ssh-copy-id -i /path/to/key.pub user@remote_hostКод: Выделить всё
ssh-add -DКод: Выделить всё
ssh-add -dКод: Выделить всё
ssh-add -XКод: Выделить всё
ssh-add -x