Personal copy of the Guile-SSH repository (

Ludovic Courtès 926a084362 build: Generate and use libguile-ssh/config.h. 2 years ago
am 025fe9b6b8 build: Use $(GUILD) instead of `which guild`. 2 years ago
build-aux 503ae1ce63 NEWS: Bump version to 0.10.2 2 years ago
doc 658d01e1de doc/guile-ssh.texi: Fix a grammar error 2 years ago
examples bf77818e04 build: Allow VPATH builds. 2 years ago
libguile-ssh 926a084362 build: Generate and use libguile-ssh/config.h. 2 years ago
m4 b78575f418 build: Update Guile's and Gettext's Autoconf macros. 2 years ago
modules b2dfb81256 node.scm (issue-procps-warning): New procedure 2 years ago
tests bf77818e04 build: Allow VPATH builds. 2 years ago
.dir-locals.el 9408cf43c8 .dir-locals.el: Configure 'with-ssh' indent 2 years ago
.gitignore 9869f87c77 build: Remove 'version.texi', which is generated. 2 years ago
AUTHORS a334d721af AUTHORS: Update 2 years ago
COPYING 49418ce1b9 COPYING, INSTALL, NEWS: Add to the repository. 6 years ago
ChangeLog 83b0c0a826 Generate ChangeLog automatically 3 years ago
INSTALL b78575f418 build: Update Guile's and Gettext's Autoconf macros. 2 years ago b78575f418 build: Update Guile's and Gettext's Autoconf macros. 2 years ago
NEWS d0a2b63b2d NEWS: Update 2 years ago
README be99f73024 README (Installation): Add a note about existing packages 2 years ago 06ac9f0860 Add the missed file. 5 years ago
THANKS f3d05eebaf AUTHORS, THANKS: Update 2 years ago
TODO 77b0d712a8 README, NEWS, TODO: Update 2 years ago 926a084362 build: Generate and use libguile-ssh/config.h. 2 years ago


# -*- mode: org; -*-


Guile-SSH is a library that provides access to the [[][SSH protocol]] for programs
written in [[][GNU Guile]] interpreter. It is built upon the [[][libssh]] library.

* Features
- The API that is sufficient for building of standalone SSH clients and
servers, or for embedding client/server functionality in your lispy Scheme
- 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.
* License
Guile-SSH is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version. Please see =COPYING= file for the terms of GNU General
Public License.

The logo (=doc/logo.svg=, =doc/logo-with-text.svg= and rasterised versions)
is distributed under terms of [[][Creative Commons Attribution-ShareAlike 4.0
* Requirements

- [[][GNU Guile]], version 2.0.9 or later (known to work with 2.0.9, 2.0.12)
- [[][libssh]], version 0.6.4 or later (0.7.3 or later is recommended due to
[[][CVE-2016-0739 found in previous versions]].)

* Distribution

- AUTHORS contains list of people who contributed to the library
- COPYING contains the terms of GNU General Public License.
- INSTALL contains general instructions for building/installing of
- NEWS describes user-visible changes.
- TODO contains plans for the further development and list of known bugs.

- examples -- Examples of Guile-SSH usage.
- libguile-ssh -- Sources of the Guile-SSH library.
- modules -- Scheme modules.
- doc -- Documentation in Texinfo format.
- tests -- Unit tests.

Files are usually installed according to the prefix specified to
=configure= script, =/usr/local= by default. Building and installing
gives you:

Libraries, in =${prefix}/lib=:
- libguile-ssh.a

Guile modules, in =${GUILE_SITE}/ssh=:
- auth.scm -- User authentication.
- channel.scm -- Channel manipulation.
- dist.scm -- Distributed forms.
- dist/job.scm -- Low-level distributed job API.
- dist/node.scm -- Low-level distributed node API.
- key.scm -- Keys management.
- log.scm -- Interface to libssh logging facilities
- message.scm -- Procedures for working with SSH messages.
- popen.scm -- Remote popen API.
- server.scm -- Server API.
- session.scm -- Session management.
- sftp.scm -- SFTP client API.
- shell.scm -- High-level API to a remote shell.
- tunnel.scm -- SSH tunnels.
- version.scm -- Information about versions.

All the modules will be compiled and produced .go files will be installed to
=site-ccache= directory which is something like this:

Documentation in Info format, in =${prefix}/share/info/=:

Examples, in =${prefix}/share/guile-ssh/examples=:
- ssshd.scm -- SSH server example.
- sssh.scm -- SSH client example.
+ echo/
- client.scm -- Echo client example.
- server.scm -- Echo server example.
+ rpc/
- client.scm -- A simple Guile-RPC client that makes an RPC call over
a Guile-SSH tunnel.
- server.scm -- A simple Guile-RPC server.
- rrepl.scm -- Remote REPL example.
- sscp.scm -- Scheme secure copy.
- pg-tunnel.scm -- Connect to a PostgreSQL instance through an SSH tunnel.
- uptop.scm -- Uppercase =top=, through a remote pipe.

* Installation

The library can be installed by the following means:
- Using GNU Guix:
- Using Arch GNU/Linux AUR package:
- Manually. If you're considering manual installation, see the notes below.

Thanks for all the people who helped with packaging of Guile-SSH!

For a basic explanation of the installation of the package, see the

Please *note* that you will need [[][Automake]] 1.12 or later to run
self-tests with =make check= (but the library itself can be built with
older Automake version such as 1.11).

*important* You probably want to call configure with the
=--with-guilesitedir= option so that this package is installed in
Guile's default path. But, if you don't know where your Guile site
directory is, run =configure= without the option, and it will give you
a suggestion.

* Usage
Please see the documentation in Info format for API documentation and usage
examples -- you can open it by typing =info guile-ssh= in the shell, or using
=C-h i m guile-ssh RET= combo in Emacs. Also take a look on examples in the
=examples= directory.