IA> Pavel Gulchouck писал(а) Ivan Agarkov в 18:01 17 янв 14
PG>> У binkd в unstable-ветке (которая 1.1) я сделал возможность соединения PG>> через пайп - в частности, через ssh с авторизацией по rsa-ключу. По PG>> крайней мере, под юниксами работает. В принципе такой функциональности PG>> достаточно, и не нужно делать собственный TLS, и проще с PG>> совместимостью между разным софтом.
IA> Сейчас потрогал ssh и не нашел, как там организовать пайп. VPN - можно, туннель порт2порт - можно. А пайп - как?
Со стороны клиента - просто запускаешь ssh на нужный хост. Можно добавить -T для уверенности, что не будет создаваться pty. Можно явно указать, какой ключ использовать (опцией -i). Лучше добавить "-o BatchMode=yes", чтобы быть уверенным, что он не захочет ничего спрашивать.
Со стороны сервера - прописываешь публичный ключ того, кому доверяешь, в ~/.ssh/authorized_keys, и перед ключом говоришь, например, command="/usr/local/sbin/binkd -i -f 2:463/68 -a ${SSH_CONNECTION%% *} /etc/fido/binkd.conf" и тогда на входящее соединение запускается binkd с указанными параметрами, и на stdin/stdout он получает то, что будет у клиентского ssh, соответственно, на stdout/stdin. Параметр ${SSH_CONNECTION%% *} должен отработать bash, для других шеллов нужен другой синтаксис. А вообще, он нужен только для того, чтобы передать binkd IP-адрес удалённой стороны; в принципе это делать необязательно, либо binkd может его узнать самостоятельно из той же переменной $SSH_CONNECTION. Поскольку ключ - достаточная авторизация, дополнительно проверять пароль в протоколе binkp смысла нет, и адрес звонящего узла можно указать явно ключом -f.
IA> Второй косяк: пайпы обычно таки буферизированные.
Нет, обычно они, как раз, не буферизированные, как и сокеты. И в данном конкретном случае тоже.