TL;DR: Paramiko could not open a TCP connection to port 22 at all. The host is wrong, the SSH daemon is down, or a firewall blocks you. Verify with the ssh CLI, then fix the address, port, or network path.

```text
paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on [host]
```

## Fix it

1. Test with the CLI: ssh -p 22 with your username at [host] (use your real port). Expected: either a login prompt (network fine) or a timeout/refused (network problem confirmed).
2. If refused: check the host and port. Many servers run SSH on a nonstandard port; pass port=[number] to connect(). Expected: connection opens.
3. If it times out: check security groups, firewalls, and VPN. Expected: port 22 reachable from your machine.
4. Confirm sshd runs on the target: sudo systemctl status sshd. Expected: active.

## When this applies
- connect() raises NoValidConnectionsError before any auth happens.

## When it doesn't
- You get AuthenticationException: TCP works; credentials are the problem.
- You get an SSHException about the key file: the connection opened fine.

## Compatibility
- paramiko 2.x/3.x.

## Why it happens
NoValidConnectionsError is raised when every resolved address for the host fails to connect. It is a network-layer failure, never an authentication one.

## Edge cases
- DNS resolving to an IPv6 address with no IPv6 route is a classic; try the literal IPv4.
- connect() timeout default is long; set timeout=10 so scripts fail fast while debugging.
