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
2 views