| name | shell-networking |
| description | Production-grade shell networking - curl, ssh, ports, debugging |
| sasmp_version | 1.3.0 |
| bonded_agent | 05-networking |
| bond_type | PRIMARY_BOND |
| version | 2.0.0 |
| difficulty | intermediate |
| estimated_time | 6-8 hours |
Shell Networking Skill
Master networking operations from the command line
Learning Objectives
After completing this skill, you will be able to:
Prerequisites
- Bash basics
- Basic networking concepts
- Understanding of HTTP
Core Concepts
1. Curl Essentials
# Basic requests
curl https://api.example.com # GET
curl -X POST https://api.example.com # POST
curl -o file.zip https://example.com/f # Download
# Headers and data
curl -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"key":"value"}' \
https://api.example.com
# Common options
curl -v url # Verbose
curl -s url # Silent
curl -L url # Follow redirects
curl -k url # Skip SSL verify
curl -w "%{http_code}" -o /dev/null -s url
2. SSH Operations
# Connect
ssh user@host
ssh -p 2222 user@host
ssh -i ~/.ssh/key.pem user@host
# File transfer
scp file.txt user@host:/path/
scp -r dir/ user@host:/path/
scp user@host:/path/file.txt ./
# Tunnels
ssh -L 8080:localhost:80 user@host
ssh -D 1080 user@host # SOCKS proxy
3. Port Checking
# List listening ports
ss -tlnp # TCP
ss -ulnp # UDP
netstat -tlnp # Alternative
# Check specific port
nc -zv host 80 # Port check
lsof -i :8080 # What's using port
# Scan ports
nmap -sT host # TCP scan
nmap -p 80,443 host # Specific ports
4. DNS Operations
# DNS lookup
dig example.com
dig +short example.com # IP only
dig example.com MX # MX records
dig @8.8.8.8 example.com # Specific DNS
# Alternatives
host example.com
nslookup example.com
Common Patterns
API Request with Error Handling
response=$(curl -s -w "\n%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"https://api.example.com/data")
http_code=$(echo "$response" | tail -1)
body=$(echo "$response" | sed '$d')
if [[ "$http_code" != "200" ]]; then
echo "Error: HTTP $http_code"
exit 1
fi
Wait for Port
wait_for_port() {
local host="$1" port="$2" timeout="${3:-30}"
for ((i=0; i<timeout; i++)); do
if nc -z "$host" "$port" 2>/dev/null; then
return 0
fi
sleep 1
done
return 1
}
SSH Config
# ~/.ssh/config
Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/mykey
Anti-Patterns
| Don't |
Do |
Why |
curl | bash |
Download, inspect, run |
Security risk |
| Store passwords |
Use SSH keys |
More secure |
| Skip SSL verify |
Fix certificates |
Security |
Practice Exercises
- API Client: Script to interact with REST API
- Health Checker: Check if services are up
- SSH Automation: Run commands on multiple hosts
- Port Scanner: Simple port availability checker
Troubleshooting
Common Errors
| Error |
Cause |
Fix |
Connection refused |
Service down |
Check if running |
Connection timed out |
Firewall/routing |
Check network |
Name not resolved |
DNS issue |
Check DNS |
Permission denied (publickey) |
SSH key |
Check authorized_keys |
Debug Techniques
# Test connectivity
ping -c 2 host
traceroute host
# Debug curl
curl -v https://example.com
# Debug SSH
ssh -vvv user@host
Security Guidelines
- Use SSH keys instead of passwords
- Verify SSL certificates in production
- Don't store secrets in scripts
- Use environment variables for credentials
- Audit SSH access regularly
Resources