Обмен паролями через незащищенные каналы

Решил поделиться простым способом как обмениваться сообщениями через незащищенные каналы связи. При этом под незащищенными каналами я имею ввиду не каналы, которые без шифрования и без паролей, хотя и это тоже конечно. А Вообще любое место, в котором сохранение данных вами не контролируется и данные откуда могут попасть куда угодно. 
 
Так что этот способ например хорошо подойдет если нужно побыстрому переслать например пароль или еще какие-то данные для доступов или еще что-то. При этом для админов это работает быстро и удобно, поскольку у всех есть сгенерированные пары ssh ключей и они всегда под рукой. Итак

1. Публичный ssh rsa ключ получателя

Создаем файл с публичным ключом получателя сообщения. Этим ключом сообщение будет зашифровано. Расшифровать сообщение сможет только владелец соответствующего приватного ключа, поэтому необходимо быть на 100% уверенным, что для шифрования используется нужный публичный ключ.
 
$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQ5GVyTlgZGvlxD2qch4UpzMWXMjGMvDjSAJIxt4k18VdNbh1VjBTJD0F5rQbdFoeTyaxFL/u1iU0C/GpC/4V35yTP5Wtlc32jNpYAKu7xPKnRlClSj3whNIK6DWIeysXqdMB8efQLuWnCQQ/NNN86x4IjqokH2qvW/YDzy8xaYUPxaqqiQJ02UfGV+iQL3hyvqm8C/vLNizigOYBXA1MtkRtkfuhkC1sO04y+5vRHYGY156NXVsR6i6IFEwhJpjdH2pDVSH8GNdQ2ncWPJESuyvSwlTkAudvD8t/XyjDJloR1Lb4Hm/DyW70YmJDLaJgT+JE91le4VRrmrdHDYzOP user' > ~/ssh_public_keys/user
 

2. Шифрование сообщения на стороне отправителя

$ echo 'Plain Text Message' | openssl rsautl -encrypt -oaep -pubin -inkey <(ssh-keygen -e -f ~/ssh_public_keys/user -m PKCS8) | base64 -w0

TuVPM+DFtsNlieOAmsM/mZQbCbzrEAatntcDhu7G2YXXMUoVONJDLLOQcADpkzHxaOiGFOJvoPr2KZarg6725F0wf7Y0b0fj5vgrMXU0ykEC0J6zmo4hUclxc55jMLdw5goG7oAWL0aq7GO6Eg1KtuGRCkMAZug5+pX4MHYfpnWHuBK8kcZ9TCN4F4hClDXfiab9dH9nEnddewja68eGBrfBB6EPCt0LbyF916EVODkZo7I4Zk/B4wqMZ2v3QAuel3ZmsxtZNW+hQXAn/bwpkUtezKHS2Z5om8yoTCRBmALD4imhPYRcBCI3UqgV2+91Ss6YYkSX/cfZe6xQmfg1Rg==
 
Полученное зашифрованное сообщение преобразовано в текстовую форму, пригодную для передачи через текстовые мессенджеры.
 

3. Расшифровка сообщения на стороне получателя

 
$ echo 'TuVPM+DFtsNlieOAmsM/mZQbCbzrEAatntcDhu7G2YXXMUoVONJDLLOQcADpkzHxaOiGFOJvoPr2KZarg6725F0wf7Y0b0fj5vgrMXU0ykEC0J6zmo4hUclxc55jMLdw5goG7oAWL0aq7GO6Eg1KtuGRCkMAZug5+pX4MHYfpnWHuBK8kcZ9TCN4F4hClDXfiab9dH9nEnddewja68eGBrfBB6EPCt0LbyF916EVODkZo7I4Zk/B4wqMZ2v3QAuel3ZmsxtZNW+hQXAn/bwpkUtezKHS2Z5om8yoTCRBmALD4imhPYRcBCI3UqgV2+91Ss6YYkSX/cfZe6xQmfg1Rg==' | base64 --decode | openssl rsautl -decrypt -oaep -inkey ~/.ssh/id_rsa
 
Вот в общем и все, посылаем получившуюся строчку получателю через почту или мессенджер и его сможет расшифровать только обладатель приватного ключа. В текущей ситуации, когда многие работают удаленно и в распределенных командах, бывает полезно переслать пароль побыстрому или еще какие-то данные, которые в открытом виде слать совсем не хочется.
 
Вы можете сказать, для подобных вещей есть GPG ключи и в общем все это и все уже давно придумано. Но не у всех они подключены и настроены, а вот что касается админов, то у них всегда под рукой есть rsa ключи для доступа по ssh.
 
Ну и не забывайте, что пароли писать на бумажках нельзя 🙂 

Сборка openssh с поддержкой авторизации через LDAP

На прошлых выходных вышла новая версия дистрибутива Debian 8 (Jessie), нового там много, поэтому впереди довольно много обновлений систем предстоит. В связи с этим решил заранее собрать версию ssh сервера, которая у меня используется в разных местах – она умеет работать с пользователями из LDAP. В этой статье я коснусь только самого процесса сборки, сам процесс настройки системы под подобную авторизацию я как-нибудь опишу позже. А сейчас о том как быстро и безболезненно пропатчить openssh-server на Debian 8 с патчем LPK.

Сам патч разработан давно в рамках LPK progect – http://code.google.com/p/openssh-lpk/ , есть несколько форков и продолжений этого патча под разные версии openssh. Я воспользовался одним из этих форков для предыдущего патча на Debian 7, когда пришло время я взял его же. Скачать его можно по ссылке https://github.com/takkeybook/openssh-lpk. Небольшую сложность, которая заключается в том что он для openssh-6.6p1 не так сложно обойти. Итак, предполагается что у вас уже есть среда с Debian 8 где вы будете проводить сбору. Выкачиваем исходники:

cd /usr/src ; apt-get source openssh-server

Скачиваем патч:

git clone https://github.com/takkeybook/openssh-lpk.git

Переименуем его для удобства и положим к остальным патчам для пакета:

cp openssh-lpk-6.6p1-0.3.14.patch /usr/src/openssh-6.7p1/debian/patches/openssh-lpk-6.7p1-0.3.14.patch

Добавляем в /usr/src/openssh-6.7p1/debian/patches/series этот патч

В самом патче меняем все упоминания 6.6p1 на 6.7p1. После этого пушим изменения о новых патчах

cd /usr/src/openssh-6.7p1/ ; quilt push ; quilt refresh

Доставляем необходимые пакеты для сборки если они не были установлены до этого:

apt-get build-dep openssh-server

Прописываем изменения в changelog чтобы у вас получился новый пакет с изменениями. Для этого воспользуемся утилиткой dch.

dch -i

Пишем, что-нибудь про изменения которые были внесены чтобы не забыть, например

Add LPK patch for working with LDAP

Теперь можно собирать пакет:

dpkg-buildpackage -us -uc

После это можно понаблюдать за сборкой пакета и выпить чашечку кофе, а в результате получаем весь набор пакетов который прекрасно работает с LDAP и который можно смело применять, например положить в свой локальный репозиторий для измененных пакетов и обновлять оттуда где это требуется. Но об организации своего репозитория и добавления туда новых пакетов я раскажу в другой раз.