Skip to main content

Lightweight SSH toolkit with optional MCP(stdio) JSON-RPC adapter

Project description

SSHOC

English | 简体中文

A lightweight, config-driven SSH toolkit (CLI + optional MCP stdio adapter).

  • CLI: sshoc (list/run/upload/download/hostkey/..., plus prefix mode sshoc <profile>: <command...>)
  • MCP (stdio): sshoc-mcp (line-delimited JSON-RPC, exposes ssh.* tools to MCP clients)
  • Dependency: paramiko (SSH/SFTP)

Goal: strict, predictable, easy to embed (especially for automation / AI workflows).


Quick start (pip users)

  1. Install:
python -m pip install -U sshoc

Windows note: if sshoc is still “not recognized” after install, your Python scripts directory (where sshoc.exe is generated) is likely not on PATH. Print the scripts directory and add it to PATH, then reopen your terminal:

python -c "import sysconfig; print(sysconfig.get_path('scripts'))"
  1. Initialize config (recommended: per-user config directory):
# Password auth (recommended: store password in an env var)
sshoc init demo --ssh "ssh -p 22 user@host" --password-env SSHOC_DEMO_PASSWORD

# Or: key auth
sshoc init demo --ssh "ssh -p 22 user@host" --key-path ~/.ssh/id_ed25519
  1. Set the password env var (only needed for password_env):
$env:SSHOC_DEMO_PASSWORD="your_password"
export SSHOC_DEMO_PASSWORD="your_password"
  1. First connection (known_hosts):

Default known_hosts_policy=strict. If the host key is not present in your local known_hosts, the first connection will fail. Recommended: write the host key first (optionally verify a trusted fingerprint):

sshoc hostkey ensure demo
# Strongly recommended (if you can get a trusted fingerprint from your provider/admin):
# sshoc hostkey ensure demo --expected-fingerprint "SHA256:..."
  1. Run a command:
sshoc demo: uname -a
# Or
sshoc run demo --cmd "uname -a"

Installation (development)

Install from source (recommended: create a venv in this directory):

cd "SSH_Operation_Component (MCP)"
python -m venv .venv
.venv\\Scripts\\activate
python -m pip install -U pip
python -m pip install -e .

Configuration

Where is the config file (and which one is in use)?

sshoc config path

Practical tip: pin the config path with SSHOC_CONFIG

$env:SSHOC_CONFIG="C:\\path\\to\\sshoc.config.json"
export SSHOC_CONFIG="/path/to/sshoc.config.json"

Key fields (cheatsheet)

  • servers.<profile>: profile name (recommended: A-Za-z0-9_-)
  • servers.<profile>.ssh_command: common form ssh -p <port> user@host
  • auth.type:
    • password: password or password_env
    • key: private_key_path (optional private_key_passphrase_env)
  • known_hosts_policy:
    • strict: default; unknown host keys fail fast (safer)
    • accept_new: auto-write to known_hosts_path on first connect (TOFU)
  • known_hosts_path: OpenSSH known_hosts path (template default: ~/.ssh/known_hosts)
  • default_shell: default bash -lc (set to null if the remote has no bash)

CLI

Common commands

sshoc list
sshoc demo: "ls -la /root"
sshoc run demo --cmd "python -V"
sshoc upload demo --local ./local.txt --remote /tmp/local.txt --overwrite
sshoc download demo --remote /tmp/local.txt --local ./downloaded.txt --overwrite

Host key / known_hosts

These commands print JSON (friendly for scripts/CI/automation).

# Scan the remote host key (no auth)
sshoc hostkey scan demo

# Check whether the host is present in known_hosts
sshoc hostkey is-known demo

# Scan + write into known_hosts (optional fingerprint verification)
sshoc hostkey ensure demo
sshoc hostkey ensure demo --expected-fingerprint "SHA256:..."

# Manually add a key (if you already have key_type + base64)
sshoc hostkey add demo --key-type ssh-ed25519 --public-key-base64 "<BASE64>"

# Precise removal: remove one key type, or remove all key types for the host
sshoc hostkey remove demo --key-type ssh-ed25519
sshoc hostkey remove demo --all-types

MCP (stdio) server

Start:

sshoc-mcp

Tools:

  • ssh.list_profiles
  • ssh.scan_host_key
  • ssh.is_known_host
  • ssh.add_known_host
  • ssh.ensure_known_host
  • ssh.run
  • ssh.upload
  • ssh.download

Generic stdio config blueprint (for MCP clients)

Different MCP clients may use different config formats, but the essentials are usually: command / args / env / cwd. Below is a generic blueprint (field names are for reference—adapt to your client):

{
  "mcpServers": {
    "sshoc": {
      "command": "sshoc-mcp",
      "args": ["--config", "<ABS_CONFIG_PATH>"],
      "env": {
        "SSHOC_DEMO_PASSWORD": "your_password",
        "SSHOC_DEBUG": "0"
      },
      "cwd": "<OPTIONAL_WORKDIR>"
    }
  }
}
// Examples for <ABS_CONFIG_PATH>:
// - macOS/Linux: /path/to/sshoc.config.json
// - Windows: C:\\path\\to\\sshoc.config.json

Security notes (strongly recommended)

  • Never commit plaintext passwords; prefer password_env
  • accept_new is TOFU (trust on first use); safer: verify with --expected-fingerprint
  • This tool effectively gives automation/AI a remote execution entry point—use it only in environments you trust

License

Apache-2.0 (see LICENSE)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sshoc-0.1.4.tar.gz (34.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sshoc-0.1.4-py3-none-any.whl (34.3 kB view details)

Uploaded Python 3

File details

Details for the file sshoc-0.1.4.tar.gz.

File metadata

  • Download URL: sshoc-0.1.4.tar.gz
  • Upload date:
  • Size: 34.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for sshoc-0.1.4.tar.gz
Algorithm Hash digest
SHA256 564ac06b0e5b13470280d91969f919187b8fbf64614761c8718cdcde0ef5ea5a
MD5 bf1ff168cec9b6e86201eca05d41b4a0
BLAKE2b-256 05ab8cc803a6ba65cd6926a56803cea2a5b93b3821dc0a8a40410953cacc6cd9

See more details on using hashes here.

File details

Details for the file sshoc-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: sshoc-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 34.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for sshoc-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 422bd0c1d87823307ffaec765d505dc639f7c5fa20e19e418b557fbce475be0a
MD5 561ecc4719c74b7cd2409a2d2333ef25
BLAKE2b-256 32cff8a373fe40c1f151fed7947c62de9cd9b0f1cfd00fb786edf9cb2ea385b3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page