ssh-manager
Skill534 starsChanged 17 days agoMITView on GitHub
How to use the MCP SSH Manager core tools (ssh_list_servers, ssh_execute, ssh_upload, ssh_download, ssh_sync) without breaking a server: server names, the remote shell, time limits and long commands, file transfer pitfalls, security modes, host keys. Use it whenever a task runs a command or moves a file on a remote machine through these tools.
- Reads credentials
1 other project uses a version of this.
Adopted by
Most recently taken up by
- ScriptingApp/skillstheir own version, first seen Oct 28, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- ScriptingApp/skills★ 16same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- ssh-incidentSkill
- ssh-operationsSkill
- ssh-restrictedSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 3 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
Call ssh_list_servers once and use the exact names.
- Distinctive: line 43
Never put a password or token in the command line: it ends up in the remote process list and in logs.
- Very specific: line 48
Default timeout 120 s, maximum 300 s (timeout, in ms).
- Very specific: line 53
Never run a service restart straight inside ssh_execute: if the call is cut, the restart stops halfway and workers stay stopped.
- Very specific: line 71
Prefer key authentication.
- Very specific: line 77
Look before you change (ls -la, git status, systemctl status) and use read-only calls to find out what is wrong before restarting anything.
- Distinctive: line 79
Do not retry a destructive command that failed until you know why it failed.
- Distinctive: line 80
When you report back, name the servers you touched and the commands that changed something.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Using the SSH Manager tools
This skill covers the five core tools, the ones exposed in the default minimal mode. If
more groups are enabled (ssh-manager tools list), prefer the specific tool over a raw command.
| Tool | What it does | Changes the server? |
ssh_list_servers | Lists configured servers: name, host, user, port, auth type, default directory, group. Never returns secrets. | no |
ssh_execute | Runs one command line, returns stdout, stderr, code. | depends on the command |
ssh_upload | Copies ONE local file over SFTP, overwriting the target. No backup, no sudo. | yes |
ssh_download | Copies ONE remote file to a local path (overwrites the local file). | no |
ssh_sync | rsync over SSH. One side local:, the other remote:. dryRun previews, delete removes extras at the destination. | yes |
Before the first command
- Call
ssh_list_serversonce and use the exact names. A name is lowercase and every character that is not a letter or a digit became_(my-site.ch→my_site_ch). Several names can share one host with different users: take the user with the rights you need and no more. ssh_executerunscd -- '<cwd, or the server's default directory>' && <your command>. Passcwdwhen the default is wrong. A missing directory fails the whole call.- A server can be in
readonlymode (destructive commands and uploads refused) orrestrictedmode (only commands matching its patterns). A refusal is the configuration working: do not look for a way around it, ask whoever owns the server.
Writing the command
- Assume the remote shell is
sh/dash, not bash: no<(…), no[[ … ]], no arrays, no{a,b}, no$'…'. A syntax error aborts the whole line before any part of it ran. Pipe instead, or wrap inbash -c '…'. - Heredocs work (
<<'EOF'). Quote the delimiter so nothing is expanded by the remote shell. - Chain with
&&when step two must not run after a failure. pgrep -fandpkill -fmatch every command line, including the shell that carries your command. Bracket one letter (pgrep -f '[n]ginx -g') and kill in one call, relaunch in the next.- Never put a password or token in the command line: it ends up in the remote process list and in logs. Use a file with mode 600 or an environment variable set on the remote side.
Time limits and long commands
- Default timeout 120 s, maximum 300 s (
timeout, in ms). In practice a call can be cut after about three minutes. A command killed halfway leaves its work half done. - Anything long or that restarts a service (builds, migrations, big copies, restarts): start it
detached and poll with short calls.
setsid nohup <command> > ~/job.log 2>&1 &thentail -n 20 ~/job.log. Never run a service restart straight insidessh_execute: if the call is cut, the restart stops halfway and workers stay stopped. ssh_synchas its own timeout, 30 s by default: raise it for a big tree.
Moving files
ssh_uploadreplaces the target completely. On a directory other people edit (a shared git tree), never upload a whole file over an existing one: you silently revert what changed in it since your copy. Apply a targeted edit on the remote, or upload to your own directory.- For trees, run
ssh_syncwithdryRun: truefirst and read the list. Neverdelete: truewithout having read it. - To read a big file (a log, a dump),
ssh_downloadit instead ofcatinsidessh_execute.
Host keys and secrets
- Hosts are checked against
known_hosts: a changed key is refused. A rebuilt server legitimately changes its key, but never accept it blindly: compare the new key seen from two machines (ssh-keyscanfrom yours and from another trusted host), then replace the old line. - Prefer key authentication. Password servers need
sshpasslocally forssh_sync. - The configuration file (
~/.ssh-manager/.env) holds passwords and key paths: never print it and never paste it in a message.
Good habits
- Look before you change (
ls -la,git status,systemctl status) and use read-only calls to find out what is wrong before restarting anything. - Do not retry a destructive command that failed until you know why it failed.
- When you report back, name the servers you touched and the commands that changed something.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

