Sono riuscito a connettermi con:
tunnel = sshtunnel.SSHTunnelForwarder((ssh_host, 22), ssh_password=ssh_password, ssh_username=ssh_username,
remote_bind_address=('localhost', 3306))
tunnel.start()
Apparentemente la differenza consisteva nel mantenere il tunnel aperto invece di usare l'istruzione 'with', anche se non capisco cosa sia effettivamente successo e apprezzerei una spiegazione.