ssh2-connect
Version:
Callback-based api behind ssh2 to open an SSH connection
189 lines (138 loc) • 5.77 kB
Markdown
//img.shields.io/github/actions/workflow/status/adaltas/node-ssh2-connect/test.yml?branch=master)](https://github.com/adaltas/node-ssh2-connect/actions)
[](https://www.npmjs.com/package/ssh2-connect)
[](https://www.npmjs.com/package/ssh2-connect)
The Node.js ssh2-connect package extends the [`ssh2`](https://www.npmjs.com/package/ssh2) module to provide a simplified callback-back approach to initiate a new SSH connection.
The project is OSS and licensed under the [MIT license](https://github.com/adaltas/node-ssh2-connect/blob/master/LICENSE.md).
```bash
npm install ssh2-connect
```
The `ssh2-connect` module exposes 4 functions.
```js
// With ESM
import { connect, is, closed, opened } from "ssh2-connect";
// Or with CommonJS
const { connect, is, closed, opened } = require("ssh2-connect");
```
Use `connect` to establishes the SSH connection
```js
// Establishes the SSH connection
const client = await connect({
host: "example.com",
username: "user",
privateKeyPath: "~/.ssh/id_ed25519",
});
```
The `connect` function return a promise.
Options are inherited from the [ssh2 `connect` method](https://www.npmjs.com/package/ssh2#client-methods) with a few additions.
- `options` - The configuration options for the SSH connection.
- `options.username` - The username for authentication. Defaults to the current user if not provided.
- `options.retry` - The number of connection retry attempts. Set to `0` or `false` to disable retries, default is `1`.
- `options.wait` - The wait time in milliseconds between each attempts, default to `500`.
- `options.privateKey` - The private key as a string or Buffer for authentication.
- `options.privateKeyPath` - The path to the private key file, or true for auto-discovery in ~/.ssh.
- `options.password` - The password for authentication.
- `options.[key: string]` - Any other valid SSH2 connection options.
Note, the "privateKeyPath" option is provided as a conveniency to read the private key and fill the "privateKey" property.
Additionally, all options may be provided in camalize (the default in [ssh2](https://www.npmjs.com/package/ssh2)) and snake cases. For example, both "privateKey" and "private_key" would be interprated the same.
### `is(conn: unknown): boolean`
Checks if the provided argument `conn` is an instance of the `Client` connection class from the ssh2 package.
- `conn` - The object to check, probably an SSH client connection.
### `close(conn: Client): PromiseLike<boolean>`
Close the the SSH client connection. It resolves to `true` if the connection was opened and closed. Otherwise it resolves to `false`.
- `conn` - The SSH client connection to close.
### `closed(conn: Client): boolean`
Checks if the provided SSH client connection is closed.
- `conn` - The SSH client connection to check.
### `opened(conn: Client): boolean`
Checks if the provided SSH client connection is open and writable.
- `conn` - The SSH client connection to check.
## Purpose
This package simplifies the creation and the usage of an SSH connection. For example, the original [ssh2](https://www.npmjs.com/package/ssh2) code...
```js
import ssh2 from "ssh2";
const connection = new ssh2();
connection.on("error", function (err) {
// Handle the connection error
connection.end();
});
connection.on("ready", function () {
// Work with the connection
connection.end();
});
connection.connect({
host: "localhost",
user: "milou",
password: "wafwaf",
});
```
Is simplified to:
```js
import { connect } from "ssh2-connect";
try {
const ssh = await connect({
host: "localhost",
username: "milou",
private_key_path: "~/.ssh/id_ed25519",
});
// Work with the connection, then close it
} catch (err) {
// Handle the connection error
} finally {
// Close the connection
ssh.end();
}
```
The example is using both the "ssh2-connect" and "ssh2-fs" modules.
```js
const connect = require("ssh2-connect");
const fs = require("ssh2-fs");
// Open the connection
connect({host: "localhost"}, function(err, ssh){
// Create a directory
fs.mkdir(ssh, "/tmp/a_dir", (err, stdout, stderr){
console.log(stdout);
});
});
```
Compare this to the more verbose alternative using the original ssh2 module.
```js
ssh2 = require("ssh2");
fs = require("ssh2-fs");
connection = new ssh2();
connection.on("error", function(err){
connection.end()
});
connection.on("ready", function(){
fs.mkdir(connection, "/tmp/a_dir", (err, stdout, stderr){
console.log(stdout);
});
});
connection.connect({host: "localhost"});
```
Tests are executed with mocha. To install it, run `npm install`, it will install mocha and its dependencies in your project "node_modules" directory.
```bash
npm install
npm test
```
Source code is written in Typescription. The build command generates the JavaScript files.
```bash
npm run build
```
The test suite is run online with [GitHub actions](https://github.com/adaltas/node-ssh2-connect/actions) against several Node.js version.
Versions are incremented using semantic versioning. To create a new version and publish it to NPM, run:
```bash
npm run release
npm run release:<major|minor|patch>
git push --follow-tags origin master
```
The NPM publication is handled with the GitHub action.
The project is sponsored by [Adaltas](https://www.adaltas.com) based in Paris, France. Adaltas offers support and consulting on distributed systems, big data and open source.
[![Build Status](https: