The ConnectTimeout parameter in SSH client configuration (/etc/ssh/ssh_config or ~/.ssh/config) specifies how long (in seconds) the client will wait for the initial TCP connection to establish before aborting the attempt. This is distinct from session keepalive mechanisms controlled by ServerAliveInterval.
When examining timeout values:
ConnectTimeout 0: Disables timeout completely - the client will wait indefinitely for TCP connection establishment
ConnectTimeout 1000: Waits 1000 seconds (16.67 minutes) before failing the connection attempt
For long-running SSH sessions with Debian systems, consider this optimized setup:
# Client configuration (~/.ssh/config)
Host persistent-connection
HostName your.server.com
User remoteuser
ConnectTimeout 30
ServerAliveInterval 60
ServerAliveCountMax 720
TCPKeepAlive yes
# Server configuration (/etc/ssh/sshd_config)
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 720
When troubleshooting, use verbose mode to observe timeout behavior:
ssh -vvv -o ConnectTimeout=10 user@host
Key indicators in output:
debug1: Connecting to host [x.x.x.x] port 22.
debug1: connect to address x.x.x.x port 22: Connection timed out
Adjust ConnectTimeout based on network conditions:
- Local network: 5-10 seconds
- Cross-continent: 30-60 seconds
- Unreliable networks: Higher values (300+) with retry logic
For automation scripts, implement timeout logic like this Python example:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect('hostname',
username='user',
timeout=30, # ConnectTimeout equivalent
keepalive=60)
except socket.timeout:
print("Connection timed out - adjust ConnectTimeout or check network")
While you've correctly configured ServerAliveInterval and ClientAliveInterval for maintaining persistent SSH connections, the ConnectTimeout parameter serves a fundamentally different purpose in SSH connections.
The ConnectTimeout parameter in ssh_config specifies the maximum time (in seconds) that ssh will wait for the initial TCP connection to be established with the remote host. This is distinct from:
ServerAliveInterval: Checks connection liveness after establishment
LoginGraceTime: Controls authentication timeout
Consider these configuration examples:
# Immediate timeout (not recommended)
ConnectTimeout 0
# 10-second connection attempt
ConnectTimeout 10
# 1000-second timeout (16.67 minutes)
ConnectTimeout 1000
High-latency networks: When connecting to remote servers over satellite links or international connections, you might need:
ConnectTimeout 30 # Allows for slower initial handshake
Local networks: For LAN connections where fast failure is preferred:
ConnectTimeout 2
Combine with verbose output to diagnose problems:
ssh -v -o ConnectTimeout=15 user@remotehost
This will show you exactly where in the connection process timeouts occur.
For your Debian system, consider these configuration locations:
# System-wide (affects all users)
/etc/ssh/ssh_config
# User-specific settings
~/.ssh/config
For your specific requirement of long-lived SSH sessions on Debian 8:
Host *
ConnectTimeout 10
ServerAliveInterval 60
ServerAliveCountMax 720
TCPKeepAlive yes
This configuration provides a balance between connection establishment reliability and session persistence.
Understanding SSH ConnectTimeout: Configuration for Persistent Connections in Linux/Debian Environments
27 views