Spaces:
Build error
Build error
name: SSH Microagent | |
type: knowledge | |
version: 1.0.0 | |
agent: CodeActAgent | |
triggers: | |
- ssh | |
- remote server | |
- remote machine | |
- remote host | |
- remote connection | |
- secure shell | |
- ssh keys | |
# SSH Microagent | |
This microagent provides capabilities for establishing and managing SSH connections to remote machines. | |
## 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 | |
``` | |