Hello Guilers, I'm pleased to announce Guile-SSH 0.9.0: https://github.com/artyom-poptsov/guile-ssh/releases/tag/v0.9.0 Please find the package signed with my GPG key[1] here: - ftp://memory-heap.org/software/guile-ssh/guile-ssh-0.9.0.tar.gz - ftp://memory-heap.org/software/guile-ssh/guile-ssh-0.9.0.tar.gz.sig This release includes some bugfixes and two new modules: (ssh sftp) and (ssh popen). Some parts of API were changed, so probably you'll need to update your appilcations in order to use them with the new Guile-SSH release. See the full list of user-visible changes and Guile-SSH features below. Also the project now has its own logo: - https://github.com/artyom-poptsov/guile-ssh/blob/master/doc/logo.png - https://github.com/artyom-poptsov/guile-ssh/blob/master/doc/logo-with-text.png As you can see, the logo represents a recursive secure shell that produces lambda-bubbles (aka closures). I'm expecting that the logo will be evolving with the time, and the current version seems to be a good start. * What is Guile-SSH? Guile-SSH is a library that provides access to the SSH protocol[2] for programs written in GNU Guile interpreter. It is built upon the libssh[3] library. Currently Guile-SSH provides the following features: - The API that is sufficient for building of standalone SSH clients and servers, or for embedding client/server functionality in your lispy Scheme applications. - Several authentication methods are supported, including password authentication, public key and SSH agent authentication methods. - Key management procedures: you can make key pairs, read keys from files, get key hashes, get public keys from private keys etc. DSS, RSA, RSA1 and ECDSA (by means of OpenSSL) are supported. - Port forwarding procedures and high-level API for creating of SSH tunnels. - Distributed forms ('dist-map', 'distribute', ...) that allow to spread the evaluation of Scheme code between remote hosts. Or you can just connect to a remote REPL from Scheme using 'with-ssh' procedure and evaluate some expressions. No special server needed on the remote side, just an SSH daemon and GNU Guile installed! - SFTP client API allows you to read and write remote files over the SSH protocol right from the Scheme code. - Remote popen API that allows you to make either input, output or bidirectional pipes to remote processes. - Detailed documentation in Texinfo format with examples included, even more examples in 'examples' directory. * The list of user-visible changes Here's the list of user-visible changes (an excerpt from NEWS file): --8<---------------cut here---------------start------------->8--- * Changes in version 0.9.0 (2015-12-24) ** Bugfixes *** Fix a bug in distributed forms in handling of REPL errors Distributed procedures now throw an 'node-repl-error' on an evaluation error instead of returning of an unspecified value. *** Fix a bug in handling of strings in distributed forms The 'rrepl-eval' was always failing to send sexps that contain strings in the proper way because the procedure uses the human-readable printing to transmit the data. As the result an RREPL fails to evaluate it and reports an error. The bug is fixed by switching to the machine-readable data printing. *** 'dist-map' and 'distribute' now raise an error if an evaluation failed instead of silently return an empty list. *** 'channel-listen-forward' now returns a correct port number 'channel-listen-forward' would always return garbage as the 2nd argument when called with port > 0. Now when the port is explicitly specified then the procedure returns the specified port as the 2nd argument. *** Add missing export of 'node-tunnel' from (ssh dist node) module ** Changes in API *** Distributed forms now return the number of evaluation as a number instead of string. *** 'with-ssh' is now capable of handling of multiple values 'with-ssh' now returns a vector of values if an expression was evaluated to multiple values. 'distribute' and 'dist-map' only take the 1st value if multiple values were returned by an expression. *** Nodes are now capable of starting and stopping a remote REPL (RREPL) The new behaviour is controlled by 'start-repl-server?' and 'stop-repl-server?' keyed options of 'make-node'. Stopping of a RREPL server is disabled by default. *** Channels now can be created as input, output or bi-drectional ports The direction of a channel is controlled by the 2nd argument to 'make-channel' procedure. *** 'make-session' now takes 'config' option that allows to specify whether the SSH config should be parsed or not, and optionally the path to the config. ** New procedures *** New procedure 'node-server-running?' in (ssh dist node) *** New procedure 'node-run-server' in (ssh dist node) *** New procedure 'node-stop-server' in (ssh dist node) *** New procedure 'node-guile-version' in (ssh dist node) *** New procedure 'session-parse-config!' in (ssh session) ** New modules *** (ssh popen) Remote popen interface to interact with remote processes. *** (ssh sftp) SFTP interface that allows to operate on remote files. ** Documentation *** Move description of tunnels into a separate section *** Add description of the new procedures *** Update existing documentation ** Unit tests *** Expand the test suite for distributed forms *** Expand the test suite for tunnels ** Add the project logo --8<---------------cut here---------------end--------------->8--- As usual, comments and bug-reports are very welcome. Happy hacking! - Artyom [1] https://pgp.mit.edu/pks/lookup?search=0x0898A02F&op=index [2] https://en.wikipedia.org/wiki/Secure_Shell [3] https://www.libssh.org/ -- Artyom V. Poptsov ; GPG Key: 0898A02F Home page: http://poptsov-artyom.narod.ru/