MCP Hub
Back to servers

remote-ssh-mcp

Enables persistent SSH sessions and SFTP file transfers with native GUI credential prompts for secure remote server management. It supports background command execution, session pooling, and automatic connection reuse across multiple commands.

Updated
Feb 2, 2026

remote-ssh-mcp

MCP server for persistent SSH sessions with native GUI credential prompts.

npm version

Features

  • 🔗 Persistent Sessions - Connections survive across multiple commands
  • 🔐 GUI Credential Prompts - Native dialogs on Linux/macOS/Windows
  • 📁 File Transfer - Upload/download via SFTP
  • ⏱️ Background Commands - Run long tasks without blocking
  • 🔄 Session Reuse - Automatic connection pooling per host
  • 🛡️ Secure - Per-process secrets, localhost-only helper

Installation

npm install -g remote-ssh-mcp

Quick Start

Add to your MCP client config:

{
  "mcpServers": {
    "ssh": {
      "command": "remote-ssh-mcp"
    }
  }
}

That's it! Connect to servers and credentials will be prompted via native GUI.

Configuration

Environment Variables (Optional)

Skip GUI prompts by setting credentials:

{
  "mcpServers": {
    "ssh": {
      "command": "remote-ssh-mcp",
      "env": {
        "SSH_USER": "deploy",
        "SSH_PASSWORD": "secret"
      }
    }
  }
}

Host Config File (Optional)

Create ~/.ssh/mcp-hosts.json:

{
  "defaults": { "username": "admin" },
  "hosts": {
    "prod.example.com": {
      "username": "deploy",
      "keyPath": "~/.ssh/deploy_key"
    }
  }
}

Tools

ToolDescription
ssh_connectConnect to SSH server, returns session_id
ssh_execExecute command (with optional background mode)
ssh_read_bufferRead terminal output history
ssh_disconnectClose a session
list_sessionsList active sessions
scp_uploadUpload file via SFTP
scp_downloadDownload file via SFTP

Example Usage

1. ssh_connect(host="server.com", auth_mode="password")
   → { session_id: "abc-123", status: "connected" }

2. ssh_exec(session_id="abc-123", command="cd /app && git pull")
   → { stdout: "Already up to date.", exit_code: 0 }

3. ssh_exec(session_id="abc-123", command="npm run build", background=true)
   → { status: "running", pid: "12345" }

4. ssh_read_buffer(session_id="abc-123", lines=50)
   → { lines: ["Building...", "Done!"], total_buffered: 150 }

GUI Requirements

For credential prompts:

  • Linux: zenity (apt install zenity)
  • macOS: Built-in (osascript)
  • Windows: Built-in (PowerShell)

Without GUI, use environment variables or config file.

Security

  • Credentials prompted via native OS dialogs
  • Never logged or written to disk
  • Per-process authentication tokens
  • Localhost-only credential helper
  • Sessions auto-expire after 15 min inactivity

License

MIT

Reviews

No reviews yet

Sign in to write a review