forward
Forward ports between local system and remote targets (SSH hosts, Docker containers, Kubernetes pods).
Synopsis​
xec forward [options] <target> <port-mapping>
xec fwd [options] <target> <port-mapping> # Alias
Description​
The forward command establishes port forwarding tunnels between your local machine and remote targets. It supports SSH port forwarding, Docker container port mapping, and Kubernetes pod port forwarding.
Arguments​
<target>- Target to forward from (SSH host, Docker container, or Kubernetes pod)<port-mapping>- Port mapping specification (see Port Mapping Format below)
Port Mapping Format​
Port mappings can be specified as:
PORT- Forward same port number (local:PORT → remote:PORT)LOCAL:REMOTE- Forward local port to different remote port0:REMOTE- Auto-select available local portPORT1,PORT2- Forward multiple ports (comma-separated)LOCAL1:REMOTE1,LOCAL2:REMOTE2- Multiple custom mappings
Options​
General Options​
-p, --profile <profile>- Configuration profile to use-i, --interactive- Interactive mode for setting up port forwarding-b, --bind <address>- Local bind address (default: 127.0.0.1)-r, --reverse- Reverse port forwarding (remote to local) - Not yet implemented--background- Run port forwarding in background-v, --verbose- Enable verbose output-q, --quiet- Suppress output--dry-run- Preview port forwarding without establishing
Examples​
Basic Port Forwarding​
Forward common service ports:
# Forward PostgreSQL from SSH host
xec forward hosts.db 5432
# Forward MySQL from Docker container
xec forward containers.mysql 3306
# Forward Redis from Kubernetes pod
xec forward pods.redis 6379
Custom Port Mapping​
Map to different local ports:
# Forward remote port 80 to local port 8080
xec forward pods.webapp 8080:80
# Forward remote PostgreSQL to local port 15432
xec forward hosts.database 15432:5432
# Forward multiple services
xec forward hosts.server 8080:80,8443:443
Auto Port Selection​
Let Xec choose available local ports:
# Auto-select local port for remote service
xec forward hosts.api 0:3000
# Auto-select for multiple ports
xec forward containers.app 0:8080,0:9090
Different Bind Addresses​
Control local bind address:
# Bind to all interfaces (accessible from network)
xec forward --bind 0.0.0.0 hosts.web 8080:80
# Bind to specific interface
xec forward --bind 192.168.1.100 containers.api 3000
# Default: localhost only (127.0.0.1)
xec forward hosts.db 5432
Background Mode​
Run port forwarding in background:
# Start forwarding in background
xec forward --background pods.service 8080
# Multiple background forwards
xec forward --background hosts.db 5432
xec forward --background hosts.cache 6379
Interactive Mode​
Use interactive prompts for configuration:
# Interactive setup
xec forward -i
# Prompts for:
# - Target type (SSH/Docker/Kubernetes)
# - Specific target selection
# - Remote port
# - Local port configuration
# - Additional options
Target Types​
SSH Hosts​
Forward ports through SSH tunnels:
# Basic SSH forwarding
xec forward hosts.prod 3000
# Multiple SSH forwards
xec forward hosts.gateway 80,443,3306
# Custom SSH host configuration
xec forward hosts.bastion 22222:22
Docker Containers​
Forward ports from Docker containers:
# Forward from running container
xec forward containers.webapp 8080
# Forward multiple container ports
xec forward containers.stack 3000,3001,3002
# Uses Docker networking internally
xec forward containers.db 27017
Kubernetes Pods​
Forward ports from Kubernetes pods:
# Forward from pod
xec forward pods.frontend 3000
# Forward with namespace (from config)
xec forward pods.backend 8080
# Multiple pod ports
xec forward pods.monitoring 9090,9093,3000
Advanced Usage​
Multiple Port Forwarding​
Forward multiple ports simultaneously:
# Forward web and API ports
xec forward hosts.server 80,443,3000,8080
# Different local/remote mappings
xec forward containers.stack 8080:80,8443:443,13306:3306
# Mix auto and fixed ports
xec forward pods.services 0:9090,8080:8080,0:3000
Tunnel Chains​
Create complex forwarding scenarios:
# Forward through jump host (configured in SSH)
xec forward hosts.internal-db 5432
# Access container through SSH tunnel
xec forward hosts.docker-host 8080:80
# Kubernetes through bastion
xec forward hosts.k8s-bastion 6443:6443
Service Discovery​
Use with service discovery patterns:
# Forward all database ports
xec forward hosts.db 5432,6379,27017
# Forward monitoring stack
xec forward pods.monitoring 3000,9090,9093,8086
# Forward development services
xec forward containers.dev 3000,3001,4200,8080
Configuration​
Set default forward options in .xec/config.yaml:
targets:
hosts:
database:
type: ssh
host: db.internal
username: deploy
# SSH config for tunneling
localForward:
- 5432:localhost:5432
- 6379:localhost:6379
commands:
forward:
bind: "127.0.0.1"
background: false
Network Security​
Bind Address Security​
127.0.0.1(default) - Local access only0.0.0.0- Network accessible (use with caution)- Specific IP - Bind to specific network interface
Firewall Considerations​
# Local-only (safe default)
xec forward hosts.db 5432
# Network accessible (requires firewall rules)
xec forward --bind 0.0.0.0 hosts.api 8080
# Check local port usage
netstat -an | grep LISTEN
Troubleshooting​
Common Issues​
Port already in use:
# Use different local port
xec forward hosts.service 18080:8080
# Or auto-select
xec forward hosts.service 0:8080
Permission denied (ports < 1024):
# Use higher local port
xec forward hosts.web 8080:80
# Or use sudo (not recommended)
sudo xec forward hosts.web 80
Connection refused:
- Verify target service is running
- Check firewall rules
- Confirm target configuration
Debugging​
# Verbose output for debugging
xec forward -v hosts.service 3000
# Dry run to test configuration
xec forward --dry-run pods.app 8080:80
# Check active forwards
ps aux | grep "xec forward"
netstat -an | grep LISTEN
Cleanup​
Port forwards are automatically cleaned up when:
- Process is terminated (Ctrl+C)
- Terminal session ends
- System shutdown
For background forwards:
# Find forward processes
ps aux | grep "xec forward"
# Kill specific forward
kill <pid>
# Kill all forwards
pkill -f "xec forward"
Performance Considerations​
- SSH forwarding adds encryption overhead
- Docker forwarding uses socat for efficiency
- Kubernetes forwarding uses native kubectl
- Multiple ports share the same tunnel when possible
Limitations​
- Reverse forwarding (
-r) not yet implemented - UDP forwarding not supported
- Dynamic port forwarding (SOCKS) not available
- Maximum 65535 ports per target
Related Commands​
- on - Execute commands on SSH hosts
- in - Execute commands in containers/pods
- copy - Transfer files to/from targets
Exit Codes​
0- Success, forwarding established1- General error2- Invalid arguments3- Target not found4- Port binding failed5- Network error