Skip to main content
Glama
zhangqi-eiq

SSH Remote File MCP Server

by zhangqi-eiq

SSH Remote File MCP Server

Dateien auf einem Remote-Server über Claude Code lesen, bearbeiten und Befehle ausführen — als wären die Dateien lokal.

Ein MCP-Server, der einen Remote-SSH-Host als eine Reihe von Dateisystem-Tools bereitstellt. Nach der Registrierung bei Claude Code können Sie ihn bitten, /home/you/proj/main.py zu lesen, eine Funktion zu bearbeiten, pytest auszuführen oder über den Remote-Baum zu greppen — und er kommuniziert über SSH mit dem Server, mit Pfad-Scoping und Befehls- Filterung auf dem Weg.

中文文档 / Chinesische Version → · GitHub →

Lizenz

MIT — siehe LICENSE.


Related MCP server: MCP SSH Server

Funktionen

Tool

Zweck

ssh_read_file

Eine Remote-Datei lesen

ssh_write_file

Eine Remote-Datei erstellen oder überschreiben (auch anhängen)

ssh_edit_file

Suchen-und-Ersetzen in einer Remote-Datei

ssh_list_directory

Ein Remote-Verzeichnis mit Berechtigungen, Größe, mtime auflisten

ssh_run_command

Einen Shell-Befehl auf dem Remote ausführen (mit Sicherheitsfiltern)

ssh_search_files

Dateien nach Namens-Glob oder Inhalt finden

ssh_get_env_info

OS / Python / Festplatte / Speicher / CPU-Schnappschuss

ssh_file_info

Detaillierte Stat-Angaben für einen einzelnen Pfad


Schnellstart

# 1. Clone and enter
git clone https://github.com/zhangqi-eiq/server_mcp.git
cd server_mcp

# 2. Install (editable mode — picks up code changes immediately)
python install.py

# 3. Edit your real credentials
#    (file is at ~/.ssh-mcp-server/config.json by default)

# 4. Restart Claude Code, then in a chat:
#    "show me the env of my server"

Das war's. install.py erledigt drei Dinge:

  1. pip install -e . — installiert das Paket.

  2. Kopiert config.json (mit Platzhalterwerten) nach ~/.ssh-mcp-server/.

  3. Führt claude mcp add aus, sodass der Server in Claude Code erscheint.

Falls Sie die claude-CLI noch nicht haben, führen Sie python install.py --no-register aus und fügen den MCP-Eintrag von Hand hinzu (siehe Manuelle Konfiguration).


Manuelle Konfiguration

Wenn Sie die Dinge lieber von Hand einrichten möchten, oder install.py nicht korrekt registriert hat:

1. Das Paket installieren

pip install -e .

Dadurch wird ssh_mcp_server in den Python-Importpfad aufgenommen, sodass python -m ssh_mcp_server den Server starten kann.

2. Ihre Konfiguration erstellen

Kopieren Sie config.json nach ~/.ssh-mcp-server/config.json (der Loader sucht dort, wenn SSH_MCP_CONFIG nicht gesetzt ist) und füllen Sie echte Werte ein:

mkdir -p ~/.ssh-mcp-server
cp config.json ~/.ssh-mcp-server/config.json
$EDITOR ~/.ssh-mcp-server/config.json

3. Bei Claude Code registrieren

Der MCP-Eintrag muss den Server über den Python-Interpreter aufrufen, in den Sie installiert haben. <python> unten sollte der absolute Pfad zu diesem Interpreter sein (sys.executable aus Ihrer aktivierten Umgebung, z. B. C:\Users\you\.conda\envs\myenv\python.exe unter Windows oder /home/you/.venv/bin/python unter Linux).

Option A — Benutzerbereich, in jedem Projekt verfügbar:

claude mcp add --scope user ssh-remote \
  -e SSH_MCP_CONFIG="$HOME/.ssh-mcp-server/config.json" \
  -- "<python>" -m ssh_mcp_server

Option B — Projektbereich, nur für dieses Projekt:

Erstellen Sie .mcp.json in Ihrem Projektstamm:

{
  "mcpServers": {
    "ssh-remote": {
      "command": "<absolute path to python>",
      "args": ["-m", "ssh_mcp_server"],
      "env": {
        "SSH_MCP_CONFIG": "/absolute/path/to/your/config.json"
      }
    }
  }
}

Hinweis: Claude Code sucht an zwei Orten nach mcpServers — in ~/.claude.json (CLI-verwaltet, geschrieben von claude mcp add) und in ~/.claude/settings.json (manuell bearbeitet). Der CLI-Weg oben schreibt automatisch in die richtige Datei.


Konfigurationsreferenz

Form von config.json:

{
  "ssh": {
    "host": "your-server.example.com",
    "port": 22,
    "username": "your-username",
    "auth": {
      "type": "password",
      "key_path": "",
      "password": "your-password",
      "key_password": ""
    },
    "connect_timeout": 10,
    "keepalive_interval": 30
  },
  "allowed_paths": [
    "/home/your-username/projects"
  ],
  "security": {
    "blocked_commands": ["rm -rf /", "mkfs", ...],
    "max_file_size_mb": 50,
    "max_output_chars": 100000,
    "command_timeout": 30
  }
}

SSH-Verbindung

Feld

Beschreibung

Standard

ssh.host

Serveradresse (IP oder Domain)

erforderlich

ssh.port

SSH-Port

22

ssh.username

Login-Benutzername

erforderlich

ssh.auth.type

"key" oder "password"

"key"

ssh.auth.key_path

Pfad zum privaten Schlüssel (Schlüssel-Auth)

erforderlich, wenn type=key

ssh.auth.password

Login-Passwort (Passwort-Auth)

erforderlich, wenn type=password

ssh.auth.key_password

Passphrase für den Schlüssel

leer

ssh.connect_timeout

Sekunden

10

ssh.keepalive_interval

Sekunden zwischen Keepalives

30

Zugriffskontrolle

  • allowed_paths — Whitelist der Remote-Verzeichnisse. Jede Dateioperation wird gegen diese Liste validiert, nach der ..-Normalisierung. Anfragen außerhalb der Liste werden abgelehnt. Unterpfade erben den Zugriff (z. B. erlaubt /data/proj /data/proj/sub/file.py).

  • security.blocked_commands — Liste von Shell-Befehlsmustern, die ssh_run_command sich weigert auszuführen. Die Standardwerte decken offensichtliche Gefahrenquellen ab (rm -rf /, mkfs, shutdown, Fork-Bomben, direkte Schreibzugriffe auf Blockgeräte). Sie können die Liste erweitern, aber schwächen Sie sie niemals ab, um einen legitimen Bedarf zu "beheben" — siehe Sicherheitsmodell.

Ressourcenlimits

Feld

Wirkung

Standard

max_file_size_mb

ssh_read_file lehnt Dateien ab, die größer sind

50

max_output_chars

ssh_run_command kürzt die Ausgabe nach so vielen Zeichen

100000

command_timeout

ssh_run_command beendet hart nach so vielen Sekunden

30


Authentifizierung

Schlüsselbasiert (empfohlen)

# On your local machine
ssh-keygen -t ed25519 -C "you@example.com"

# Push the public key to the remote
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

Dann in config.json:

"auth": {
  "type": "key",
  "key_path": "~/.ssh/id_ed25519",
  "key_password": ""
}

key_password wird nur benötigt, wenn der private Schlüssel selbst verschlüsselt ist.

Passwortbasiert

"auth": {
  "type": "password",
  "password": "your-password"
}

Das Passwort wird im Klartext in config.json gespeichert. Bevorzugen Sie die Schlüssel-Authentifizierung.


GUI-Manager (optional)

Eine kleine Tk-basierte GUI ermöglicht es Ihnen, mehrere Serverprofile zu verwalten und zwischen ihnen zu wechseln:

# From source
python server_manager.py

# Or build a standalone Windows exe and put it on PATH
pip install -e ".[gui]"   # adds pyinstaller
python build.py
python setup_global.py
# now `SSH-Server-Manager` is on PATH

Profile liegen in profiles.json; beim Wechseln wird das ausgewählte Profil in config.json kopiert, sodass der MCP-Server es beim nächsten Start übernimmt.


Sicherheitsmodell

Dieser Server ist bewusst konservativ. Zwei unabhängige Ebenen schützen den Remote-Host:

  1. Pfad-Scoping. Jede Dateioperation wird normalisiert (Auflösen von .., Zusammenfassen von Schrägstrichen) und dann gegen allowed_paths geprüft. Es gibt keine Möglichkeit, die Liste zu umgehen — die Prüfung erfolgt serverseitig, nachdem der Pfad auf dem Remote aufgelöst wurde.

  2. Befehlsfilterung. ssh_run_command lehnt jeden Befehl ab, der mit security.blocked_commands übereinstimmt (Teilstring-Match). Die Standardliste blockiert rekursive Zerstörung, direkte Geräteschreibzugriffe, System-Herunterfahren, Fork-Bomben und Remote-Shell-Installer (curl … | sh). Erweitern Sie die Liste, wenn Sie etwas Bestimmtes erlauben müssen — aber entkernen Sie sie nicht.

Dinge, die dieser Server nicht tut:

  • Er läuft nicht als Root auf dem Remote. SSH zu einem Nicht-Root-Benutzer.

  • Er umgeht kein sudo. Wenn der konfigurierte Benutzer kein sudo kann, kann es der Server auch nicht.

  • Er bietet keine interaktive Shell. Langlaufende Prozesse werden durch command_timeout beendet.


Fehlerbehebung

Symptom

Wahrscheinliche Ursache

Lösung

claude mcp list zeigt nichts

Server im falschen Bereich registriert, oder claude-CLI-Version liest ~/.claude/settings.json nicht

Verwenden Sie claude mcp add --scope user ... (schreibt ~/.claude.json)

ModuleNotFoundError: No module named 'mcp'

In ein anderes Python installiert als das, das claude verwendet

Führen Sie install.py mit dem Interpreter aus, den Claude Code verwenden soll

ERROR: ssh.host is required

Konfiguration enthält noch Platzhalterwerte

Bearbeiten Sie ~/.ssh-mcp-server/config.json und ersetzen Sie your-server.example.com, CHANGE_ME usw.

Access denied: outside allowed paths

Der Pfad, den das LLM versucht hat, ist nicht in allowed_paths

Fügen Sie den Pfad zu allowed_paths in Ihrer Konfiguration hinzu

Command blocked: dangerous pattern

Das LLM hat einen blockierten Befehl versucht

Passen Sie security.blocked_commands an, wenn Sie es wirklich brauchen

SSH authentication failed

Falsche Anmeldedaten oder falscher Benutzer

Verifizieren Sie mit ssh user@host in einer normalen Shell

Server startet, aber Claude Code zeigt keine Tools

Veralteter VSCode-Erweiterungsprozess

Beenden Sie VSCode vollständig und öffnen Sie es erneut


Projektstruktur

server/
├── ssh_mcp_server/         # MCP server package (the actual product)
│   ├── server.py           #   tool definitions
│   ├── ssh_client.py       #   paramiko wrapper
│   ├── security.py         #   path + command validation
│   └── config.py           #   config loader
├── server_manager.py       # Tk GUI for managing profiles
├── profiles.json           # GUI profile store
├── config.json             # runtime config template (placeholder values)
├── setup.py                # pip-installable package metadata
├── install.py              # one-shot installer (install + register)
├── setup_global.py         # optional: deploy GUI exe to PATH
├── build.py                # optional: PyInstaller wrapper for the GUI
├── SSH-Server-Manager.spec # PyInstaller spec for fine-grained builds
├── requirements.txt        # raw dependency pins
├── LICENSE                 # MIT
├── README.md               # this file (English)
└── README.zh.md            # Chinese translation

Lizenz

MIT — siehe die Datei für den vollständigen Text.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables SSH remote access to servers through Claude, allowing users to execute commands, transfer files via SFTP, and manage multiple remote connections using natural language.
    12
    8
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects Claude to remote servers via SSH to execute commands, manage files, and browse directories. It allows users to add, edit, and switch between multiple server configurations through natural language conversations.
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables Claude Code to control remote servers via SSH for automated deployment, testing, and operations, including command execution and file transfer.
    4

View all related MCP servers

Related MCP Connectors

  • Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.

  • Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.

  • Read, edit, publish, and preview your pepita websites from Claude.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zhangqi-eiq/server_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server