ssh-mcp-server
🔐 ssh-mcp-server
Ein SSH-basierter MCP-Server (Model Context Protocol), der die Remote-Ausführung von SSH-Befehlen über das MCP-Protokoll ermöglicht.
Englische Dokumentation | 中文文档
📝 Projektübersicht
ssh-mcp-server ist ein Brücken-Tool, das es KI-Assistenten und anderen Anwendungen, die das MCP-Protokoll unterstützen, ermöglicht, Remote-SSH-Befehle über eine standardisierte Schnittstelle auszuführen. Dies erlaubt KI-Assistenten, sicher auf Remote-Server zuzugreifen, Befehle auszuführen und Ergebnisse abzurufen, ohne SSH-Anmeldeinformationen direkt an KI-Modelle preiszugeben.
Willkommen in unserer WeChat-Gruppe:

✨ Hauptfunktionen
🔒 Sichere Verbindungen: Unterstützt mehrere sichere SSH-Verbindungsmethoden, einschließlich Passwort-Authentifizierung und Authentifizierung mittels privatem Schlüssel (mit Unterstützung für Passphrasen)
🛡️ Befehlssicherheitskontrolle: Präzise Steuerung des Bereichs erlaubter Befehle durch flexible Blacklist- und Whitelist-Mechanismen, um gefährliche Operationen zu verhindern
🔄 Standardisierte Schnittstelle: Entspricht den MCP-Protokollspezifikationen für eine nahtlose Integration mit KI-Assistenten, die das Protokoll unterstützen
📂 Dateiübertragung: Unterstützt bidirektionale Dateiübertragungen, das Hochladen lokaler Dateien auf Server oder das Herunterladen von Dateien von Servern
🔑 Isolierung von Anmeldeinformationen: SSH-Anmeldeinformationen werden vollständig lokal verwaltet und niemals an KI-Modelle weitergegeben, was die Sicherheit erhöht
🚀 Sofort einsatzbereit: Kann direkt mit NPX ohne globale Installation ausgeführt werden, was die Bereitstellung bequem und schnell macht
📦 Open-Source-Repository
GitHub: https://github.com/classfang/ssh-mcp-server
NPM: https://www.npmjs.com/package/@fangjunjie/ssh-mcp-server
🛠️ Tool-Liste
Tool | Name | Beschreibung |
execute-command | Befehlsausführungs-Tool | Führt SSH-Befehle auf Remote-Servern aus und erhält Ergebnisse |
upload | Datei-Upload-Tool | Lädt lokale Dateien an angegebene Orte auf Remote-Servern hoch |
download | Datei-Download-Tool | Lädt Dateien von Remote-Servern an angegebene lokale Orte herunter |
list-servers | Server-Listen-Tool | Listet alle verfügbaren SSH-Serverkonfigurationen auf |
📚 Verwendung
🔧 MCP-Konfigurationsbeispiele
⚠️ Wichtig: In MCP-Konfigurationsdateien muss jedes Befehlszeilenargument und sein Wert ein separates Element im
args-Array sein. Kombinieren Sie diese NICHT mit Leerzeichen. Verwenden Sie zum Beispiel"--host", "192.168.1.1"anstelle von"--host 192.168.1.1".
⚙️ Befehlszeilenoptionen
Options:
--config-file JSON configuration file path (recommended for multiple servers)
--ssh-config-file SSH config file path (default: ~/.ssh/config)
--ssh SSH connection configuration (can be JSON string or legacy format)
-h, --host SSH server host address or alias from SSH config
-p, --port SSH server port
-u, --username SSH username
-w, --password SSH password
-k, --privateKey SSH private key file path
-P, --passphrase Private key passphrase (if any)
-W, --whitelist Command whitelist, comma-separated regular expressions
-B, --blacklist Command blacklist, comma-separated regular expressions
-s, --socksProxy SOCKS proxy server address (e.g., socks://user:password@host:port)
--allowed-local-paths Additional allowed local paths for upload/download, comma-separated
--pty Allocate pseudo-tty for command execution (default: true)
--pre-connect Pre-connect to all configured SSH servers on startup
🔑 Verwendung eines Passworts
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--password", "pwd123456"
]
}
}
}🔐 Verwendung eines privaten Schlüssels
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--privateKey", "~/.ssh/id_rsa"
]
}
}
}🔏 Verwendung eines privaten Schlüssels mit Passphrase
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--privateKey", "~/.ssh/id_rsa",
"--passphrase", "pwd123456"
]
}
}
}📋 Verwendung von ~/.ssh/config
Sie können Host-Aliase verwenden, die in Ihrer ~/.ssh/config-Datei definiert sind. Der Server liest die Verbindungsparameter automatisch aus der SSH-Konfiguration:
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "myserver"
]
}
}
}Angenommen, Ihre ~/.ssh/config enthält:
Host myserver
HostName 192.168.1.1
Port 22
User root
IdentityFile ~/.ssh/id_rsaSie können auch einen benutzerdefinierten Pfad zur SSH-Konfigurationsdatei angeben:
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "myserver",
"--ssh-config-file", "/path/to/custom/ssh_config"
]
}
}
}Hinweis: Befehlszeilenparameter haben Vorrang vor Werten aus der SSH-Konfiguration. Wenn Sie beispielsweise --port 2222 angeben, überschreibt dies den Port aus der SSH-Konfiguration.
🌐 Verwendung eines SOCKS-Proxys
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--password", "pwd123456",
"--socksProxy", "socks://username:password@proxy-host:proxy-port"
]
}
}
}
📝 Verwendung von Befehls-Whitelist und -Blacklist
Verwenden Sie die Parameter --whitelist und --blacklist, um den Bereich der ausführbaren Befehle einzuschränken. Mehrere Muster werden durch Kommas getrennt. Jedes Muster ist ein regulärer Ausdruck, der zum Abgleich von Befehlen verwendet wird.
Beispiel: Verwendung einer Befehls-Whitelist
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--password", "pwd123456",
"--whitelist", "^ls( .*)?,^cat .*,^df.*"
]
}
}
}Beispiel: Verwendung einer Befehls-Blacklist
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--host", "192.168.1.1",
"--port", "22",
"--username", "root",
"--password", "pwd123456",
"--blacklist", "^rm .*,^shutdown.*,^reboot.*"
]
}
}
}Hinweis: Wenn sowohl eine Whitelist als auch eine Blacklist angegeben sind, prüft das System zuerst, ob der Befehl in der Whitelist enthalten ist, und dann, ob er in der Blacklist steht. Der Befehl muss beide Prüfungen bestehen, um ausgeführt zu werden.
🧩 Beispiel für Multi-SSH-Verbindungen
Es gibt drei Möglichkeiten, mehrere SSH-Verbindungen zu konfigurieren:
📄 Methode 1: Verwendung einer Konfigurationsdatei (Empfohlen)
Erstellen Sie eine JSON-Konfigurationsdatei (z. B. ssh-config.json):
Array-Format:
[
{
"name": "dev",
"host": "1.2.3.4",
"port": 22,
"username": "alice",
"password": "{abc=P100s0}",
"socksProxy": "socks://127.0.0.1:10808"
},
{
"name": "prod",
"host": "5.6.7.8",
"port": 22,
"username": "bob",
"password": "yyy",
"socksProxy": "socks://127.0.0.1:10808"
}
]Objekt-Format:
{
"dev": {
"host": "1.2.3.4",
"port": 22,
"username": "alice",
"password": "{abc=P100s0}",
"socksProxy": "socks://127.0.0.1:10808"
},
"prod": {
"host": "5.6.7.8",
"port": 22,
"username": "bob",
"password": "yyy",
"socksProxy": "socks://127.0.0.1:10808"
}
}Verwenden Sie dann den Parameter --config-file:
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--config-file", "ssh-config.json"
]
}
}
}🔧 Methode 2: Verwendung des JSON-Formats mit dem --ssh-Parameter
Sie können JSON-formatierte Konfigurationszeichenfolgen direkt übergeben:
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": [
"-y",
"@fangjunjie/ssh-mcp-server",
"--ssh", "{\"name\":\"dev\",\"host\":\"1.2.3.4\",\"port\":22,\"username\":\"alice\",\"password\":\"{abc=P100s0}\",\"socksProxy\":\"socks://127.0.0.1:10808\"}",
"--ssh", "{\"name\":\"prod\",\"host\":\"5.6.7.8\",\"port\":22,\"username\":\"bob\",\"password\":\"yyy\",\"socksProxy\":\"socks://127.0.0.1:10808\"}"
]
}
}
}📝 Methode 3: Legacy-Format mit Kommatrennung (Abwärtskompatibel)
Für einfache Fälle ohne Sonderzeichen in Passwörtern können Sie weiterhin das Legacy-Format verwenden:
npx @fangjunjie/ssh-mcp-server \
--ssh "name=dev,host=1.2.3.4,port=22,user=alice,password=xxx" \
--ssh "name=prod,host=5.6.7.8,port=22,user=bob,password=yyy"⚠️ Hinweis: Das Legacy-Format kann Probleme bei Passwörtern verursachen, die Sonderzeichen wie
=,,,{,}enthalten. Verwenden Sie Methode 1 oder Methode 2 für Passwörter mit Sonderzeichen.
Geben Sie in MCP-Tool-Aufrufen den Verbindungsnamen über den Parameter connectionName an. Wenn dieser weggelassen wird, wird die Standardverbindung verwendet.
Beispiel (Befehl auf der 'prod'-Verbindung ausführen):
{
"tool": "execute-command",
"params": {
"cmdString": "ls -al",
"connectionName": "prod"
}
}Beispiel (Befehl mit Timeout-Optionen ausführen):
{
"tool": "execute-command",
"params": {
"cmdString": "ping -c 10 127.0.0.1",
"connectionName": "prod",
"timeout": 5000
}
}⏱️ Timeout bei der Befehlsausführung
Das execute-command-Tool unterstützt Timeout-Optionen, um zu verhindern, dass Befehle unendlich lange hängen bleiben:
timeout: Timeout für die Befehlsausführung in Millisekunden (optional, Standardwert ist 30000ms)
Fehlerantworten enthalten stabile
code-,message- undretriable-Felder für eine einfachere Handhabung auf Agentenseite
Dies ist besonders nützlich für Befehle wie ping, tail -f oder andere lang laufende Prozesse, die die Ausführung blockieren könnten.
🗂️ Alle SSH-Server auflisten
Sie können das MCP-Tool list-servers verwenden, um alle verfügbaren SSH-Serverkonfigurationen abzurufen:
Beispielaufruf:
{
"tool": "list-servers",
"params": {}
}Beispielantwort:
[
{ "name": "dev", "host": "1.2.3.4", "port": 22, "username": "alice" },
{ "name": "prod", "host": "5.6.7.8", "port": 22, "username": "bob" }
]🛡️ Sicherheitsüberlegungen
Dieser Server bietet leistungsstarke Funktionen zum Ausführen von Befehlen und Übertragen von Dateien auf Remote-Servern. Um eine sichere Verwendung zu gewährleisten, beachten Sie bitte Folgendes:
Befehls-Whitelisting: Es wird dringend empfohlen, die Option
--whitelistzu verwenden, um die Menge der ausführbaren Befehle einzuschränken. Ohne eine Whitelist kann jeder Befehl auf dem Remote-Server ausgeführt werden, was ein erhebliches Sicherheitsrisiko darstellen kann.Sicherheit privater Schlüssel: Der Server liest den privaten SSH-Schlüssel in den Arbeitsspeicher. Stellen Sie sicher, dass der Computer, auf dem der
ssh-mcp-serverläuft, sicher ist. Setzen Sie den Server keinen nicht vertrauenswürdigen Netzwerken aus.Denial of Service (DoS): Der Server verfügt über keine integrierte Ratenbegrenzung. Ein Angreifer könnte potenziell einen DoS-Angriff starten, indem er den Server mit Verbindungsanfragen oder großen Dateiübertragungen überflutet. Es wird empfohlen, den Server hinter einer Firewall oder einem Reverse-Proxy mit Ratenbegrenzungsfunktionen zu betreiben.
Pfad-Traversal: Der Server verfügt über einen integrierten Schutz gegen Pfad-Traversal-Angriffe auf das lokale Dateisystem. Dennoch ist es wichtig, bei den in
upload- unddownload-Befehlen verwendeten Pfaden vorsichtig zu sein.Lokaler Übertragungsumfang: Standardmäßig sind lokale Dateiübertragungen auf das aktuelle Arbeitsverzeichnis beschränkt. Verwenden Sie
--allowed-local-pathsoderallowedLocalPathsin der Konfiguration nur für explizit vertrauenswürdige Verzeichnisse.
🌟 Star History
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/classfang/ssh-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server