In API transport mode, self.port = 443 (HTTPS). All SSH attempts were connecting to port 443 which speaks TLS, not SSH — hence 'banner exchange timed out'. Fix: hardcode port 22 for the SSH config fallback.
In API transport mode, self.port = 443 (HTTPS). All SSH attempts were connecting to port 443 which speaks TLS, not SSH — hence 'banner exchange timed out'. Fix: hardcode port 22 for the SSH config fallback.