remote-exec-v2 is a modern Node.js package that allows executing commands over SSH on multiple servers. It enhances automation while being careful with dangerous operations.
Thanks to https://github.com/tpresley/node-remote-exec, which inspired this project. However, that package has not been updated for years and cannot connect to newer OpenSSH servers (v8.8+). remote-exec-v2 is a fresh alternative with updated features.
Developed and tested with:
- Node.js v22.11.0
- macOS 15.1
Other platforms are not officially tested yet.
- Execute commands on multiple remote hosts via SSH
- Automatically skips dangerous commands (e.g.,
rm -rf /,shutdown) - Sequential or parallel execution mode
- Force execution of risky commands (optional)
- Supports custom encoding (e.g., GBK for Windows)
- Optional timestamped output and detailed logging
npm install remote-exec-v2const remoteExec = require("remote-exec-v2");
const hosts = [
{ host: "192.168.0.101", name: "Server-A", encoding: "gbk" },
{ host: "192.168.0.102", name: "Server-B" }
];
// or hosts in simple way
// const hosts = ["192.168.0.101","192.168.0.12"];
const commands = [
"echo Hello World",
"dir /w",
"rm -rf /important" // this will be skipped unless force: true
];
const options = {
force: false, // Skip risky commands (default)
timestamp: true, // Show timestamps and host names
parallel: false // Run sequentially
};
remoteExec(hosts, commands, options, (err) => {
if (err) {
console.error("Error during execution:", err);
} else {
console.log("Commands executed successfully on all hosts.");
}
});| Option | Type | Default | Description |
|---|---|---|---|
port |
number | 22 |
SSH port |
username |
string | "root" |
SSH username |
privateKey |
string or Buffer | ~/.ssh/id_rsa |
Path or buffer of private key |
encoding |
string or null | null |
Remote system output encoding (e.g.,"gbk") |
force |
boolean | false |
Allow execution of risky commands |
parallel |
boolean | false |
Run all hosts in parallel |
timestamp |
boolean | false |
Show detailed logs with timestamps and hostnames |
The following commands are considered risky and will be skipped unless force: true:
rmrmdirdelrimrafrm -rfshutdownrebootmkfsdd if=chmod 777 /chown rootkill -9 -1mv /cp /del /f /s /qformatnetsh advfirewall resetnetsh firewallerase /frd /s /qtaskkill /F /IMreg deletesc stopsc delete
Thanks to https://openai.com/ (ChatGPT) for code generation assistance.
If you want to contribute, feel free to fork the repository and create a pull request.
MIT License """