1. Don Brown
  2. enchanter

Overview

This project has moved from Google Code. Please see that site for old issues.
This project is also unmaintained. If you'd like to take it over, create a fork and I'll link to it.

Enchanter is a small library that helps you script SSH sessions in a manner similar to Expect. It comes in multiple flavors that support different scripting languages including Python, Ruby and BeanShell. This tool requires Java 5 or greater.

Here is an example script, 'date.py', that connects to a remote SSH server and gets the output of the 'date' command:

ssh.connect('myserver', 'myusername');
ssh.waitFor(':~>');
ssh.sendLine('date');
print 'Server date is '+ssh.getLine();
ssh.disconnect();

To execute this script with the script and enchanter jar in the current directory, run

java -jar enchanter-python-VERSION.jar date.py

Features

  • Different builds to support Python, Ruby, and !BeanShell scripts
  • Learning mode to automatically build scripts based on observing an interactive SSH session
  • Supports public key (RSA and DSA), password, and password-interactive authentication
  • API similar to the ZOC telnet/SSH client

Latest release: 0.5.1

  • Fixed missing RSA or DSA key not failing over properly to password-based authentication methods

Documentation

Common commands for the 'ssh' variable include:

  • connect(server, username) -- Connects to the remote server
  • disconnect() -- Disconnects from the remote server
  • waitFor(prompt) -- Waits for the text and returns true if found
  • waitForMux(promptList) -- Waits for multiple prompts and returns the index of the first match
  • sleep(millis) -- Sleeps for the given number of milliseconds
  • setTimeout(millis) -- Sets the timeout for all commands that wait for prompts
  • send(text) -- Sends the text to the server
  • sendLine(text) -- Sends the text to the server with the end of line markers

For a full list of commands, see the SSH interface

Examples

Each scripting language build has its own examples: Python Ruby * BeanShell

Comments or suggestions? Any feedback is appreciated.