6 сентября 2014 г.

Guile-SSH 0.7.0

Доброго времени суток, случайные и неслучайные читатели.

В прошлые выходные выпустил релиз Guile-SSH 0.7.0, и, следуя принципу "лучше поздно, чем никогда", решил написать об этом здесь, на русском.

Напомню, что Guile-SSH представляет собой свободную (GNU GPLv3+) библиотеку для программ GNU Guile (свободного интерпретатора Scheme, диалекта Lisp), предоставляющую API для работы с протоколом SSH. Данная библиотека является обёрткой для libssh.

Используя процедуры, предоставляемые библиотекой, можно создать как клиентское, так и серверное приложение, работать с публичными и приватными ключами (RSA, DSA, ECDSA), выполнять удалённо команды в не-интерактивном режиме и пересылать данные по защищённым каналам.

Библиотека снабжена документацией в Info-формате (на английском), и примерами использования (в каталоге examples).

Вот список изменений в версии 0.7.0:

  • Произведена миграция на libssh 0.6.3
  • Теперь требуется GNU Guile 2.0 для сборки и работы библиотеки.
  • Исправлен баг со сборкой мусора: до этого объекты вроде SSH-сессий могли быть освобождены сборщиком мусора раньше, чем их "потомки" (вроде SSH-каналов), что приводило к ошибкам.
  • Исправлены ошибки сегментации в модуле (ssh channel): Теперь, если в процедуру передан освобождённый SSH-канал, то бросается исключение.
  • Исправлен баг в процедурах public-key? и private-key?: Данные предикаты теперь возвращают #f для объектов, не являющихся ключами, вместо бросания исключения.
  • Добавлен новый модуль (ssh log), предоставляющий процедуры для управления логированием библиотеки libssh. Как следствие, Guile-SSH теперь работает лучше с Emacs Scheme REPL режимом (проверял на Geiser), благодаря умолчальной процедуре печати логов, которая комментирует сообщения лога, добавляя в начало строки ";;; ". Таким образом, логи от libssh не смешиваются с выводом от процедур.
  • Добавлены новые процедуры: userauth-public-key/try, bytevector->hex-string, session-get, channel-get-session, message-get-session.
  • Некоторые процедуры были переименованы, дабы названия были благозвучнее и понятнее (см. NEWS-файл для более подробной информации).
  • Улучшена печать Guile-SSH объектов, в результате вы можете получить полезную информацию об объектах, просто взглянув на распечатку объекта. Пара примеров:
            (display session)
            => #<session avp@localhost:22 (disconnected) 8b2fff0>
            (display key)
            => #<key rsa (private) 8b2ffe0>
        
  • Добавлены новые тесты для лучшего багоулавливания.
  • Добавлены примеры использования Guile-SSH API в Info-документацию.

Замечу, что данный релиз ломает обратную совместимость, так что если вы использовали Guile-SSH 0.6.0 в приложении, то вам потребуется сделать некоторые изменения, чтобы заставить приложение работать с Guile-SSH 0.7.0. В то же время, я надеюсь, что улучшения являются полезными, поэтому нарушение обратной совместимости оправдано.

Для более подробной информации о видимых измененях в новой версии см. NEWS-файл.

Пользуясь возможностью, хочу сказать спасибо Людовику Кортесу (франц. Ludovic Courtès) за патч, улучшающий работу SSH-каналов (был включён в релиз 0.6.0, о котором я здесь не писал), за баг-репорты и за полезные советы по разработке. Список авторов всегда можно посмотреть в файле AUTHORS.

Спасибо,

- Артём