ssh · openhands — Claude Code skill: SSH connections and file transfers
A skill for remote machines: connect by password or key, generate key pairs, write SSH configs, run remote commands and move files with SCP.
npx skills add OpenHands/extensions --skill ssh -a claude-codeWhat ssh does
The skill hands your agent a working set of SSH commands: connect to a remote host, run a command there, copy a file or a directory with scp. Key handling gets its own section — generate a pair with ssh-keygen, push the public key to the server, connect with -i.
There is a walkthrough for ~/.ssh/config: an alias block with HostName, User, IdentityFile and Port, so later you just type ssh alias. Common flags are listed too — custom port, X11 forwarding, local and remote port forwarding, background mode, verbose logging with -v. Windows users get references/windows.md with PowerShell equivalents for config, key paths, ssh-agent and permissions.
The skill never stores a password. On password auth it asks you for one. Private keys need 600 permissions and ~/.ssh needs 700, or SSH will refuse the connection. If a host key changed, the stale known_hosts entry has to go via ssh-keygen -R hostname — that one bites people after a server rebuild.
What it helps with
- log into a remote server with a key instead of a password
- generate an ed25519 key pair and install the public key on the host
- set up an alias in
~/.ssh/configso you stop retyping host and port - copy a directory to the server recursively with
scp -r - debug why SSH refuses you: key permissions, port, changed host key
Example prompts for the agent
- SSH into the server and show me the running processes
- Generate an ed25519 key and add an alias for this host in ~/.ssh/config
- Copy the dist folder to the remote machine with scp
How to install ssh
1Skills CLI (Vercel)
npx skills add OpenHands/extensions --skill ssh -a claude-code2Manually: put the files in place
~/.claude/skills/ssh/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/ssh/
1Skills CLI (Vercel)
npx skills add OpenHands/extensions --skill ssh -a codex2Manually: put the files in place
.agents/skills/ssh/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add OpenHands/extensions --skill ssh -a cursor2Manually: put the files in place
.cursor/skills/ssh/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install OpenHands/extensions ssh2Manually: put the files in place
.github/skills/ssh/SKILL.md1Skills CLI (Vercel)
npx skills add OpenHands/extensions --skill ssh -a gemini-cli2Platform CLI
gemini skills install https://github.com/OpenHands/extensions --path skills/sshManually: put the files in place
.devin/skills/ssh/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add OpenHands/extensions --skill ssh -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about ssh
How do I install the ssh skill in Claude?
Run npx skills add OpenHands/extensions --skill ssh -a claude-code. The skill file then lands at ~/.claude/skills/ssh/SKILL.md.
What does the ssh skill do?
It lets the agent connect to remote machines, run commands there, manage keys and SSH config, and transfer files over SCP.
What do I need for it to work?
A regular SSH client is enough. The skill asks you for a password when needed, and private keys must have 600 permissions or the connection fails.
Source text
SKILL.md · MIT
---
name: ssh
description: Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers. Use when connecting to remote servers, executing remote commands, or transferring files via SCP.
triggers:
- ssh
- remote server
- remote machine
- remote host
- remote connection
- secure shell
- ssh keys
---
# SSH Skill
This skill provides capabilities for establishing and managing SSH connections to remote machines.
Windows PowerShell equivalents for SSH config creation, key paths, ssh-agent, and permissions are in `references/windows.md`.
## Capabilities
- Establish SSH connections using password or key-based authentication
- Generate and manage SSH key pairs
- Configure SSH for easier connections
- Execute commands on remote machines
- Transfer files between local and remote machines
- Manage SSH configurations and known hosts
## Authentication Methods
### Password Authentication
```bash
ssh username@hostname
```
When prompted, you should ask the user for their password or a private key.
### Key-Based Authentication
Generate a new SSH key pair:
```bash
ssh-keygen -t ed25519 -f ~/.ssh/key_name -C "comment" -N ""
```
Copy the public key to the remote server:
```bash
ssh-copy-id -i ~/.ssh/key_name.pub username@hostname
```
Connect using the private key:
```bash
ssh -i ~/.ssh/key_name username@hostname
```
## SSH Configuration
Create or edit the SSH config file for easier connections:
```bash
mkdir -p ~/.ssh
cat > ~/.ssh/config << 'EOF'
Host alias
HostName hostname_or_ip
User username
IdentityFile ~/.ssh/key_name
Port 22
ServerAliveInterval 60
EOF
chmod 600 ~/.ssh/config
```
Then connect using the alias:
```bash
ssh alias
```
## Common SSH Options
- `-p PORT`: Connect to a specific port
- `-X`: Enable X11 forwarding
- `-L local_port:remote_host:remote_port`: Set up local port forwarding
- `-R remote_port:local_host:local_port`: Set up remote port forwarding
- `-N`: Do not execute a remote command (useful for port forwarding)
- `-f`: Run in background
- `-v`: Verbose mode (add more v's for increased verbosity)
## File Transfer with SCP
Copy a file to the remote server:
```bash
scp /path/to/local/file username@hostname:/path/to/remote/directory/
```
Copy a file from the remote server:
```bash
scp username@hostname:/path/to/remote/file /path/to/local/directory/
```
Copy a directory recursively:
```bash
scp -r /path/to/local/directory username@hostname:/path/to/remote/directory/
```
## SSH Agent
Start the SSH agent:
```bash
eval "$(ssh-agent -s)"
```
Add a key to the agent:
```bash
ssh-add ~/.ssh/key_name
```
## Troubleshooting
- Check SSH service status on remote: `systemctl status sshd`
- Verify SSH port is open: `nc -zv hostname 22`
- Debug connection issues: `ssh -vvv username@hostname`
- Check permissions: SSH private keys should have 600 permissions (`chmod 600 ~/.ssh/key_name`)
- Verify known_hosts: If host key changed, remove the old entry with `ssh-keygen -R hostname`
## Secure SSH Key Management
### Local Storage with Proper Permissions
The most basic approach is to ensure proper file permissions:
```bash
# Set correct permissions for private keys
chmod 600 ~/.ssh/id_ed25519
# Set correct permissions for public keys
chmod 644 ~/.ssh/id_ed25519.pub
# Set correct permissions for SSH directory
chmod 700 ~/.ssh
```
© OpenHands · MIT · OpenHands/extensions
Similar skills
Everything for DevOps and infrastructure →ssh by other authors comes first.