canonical / canonical/pycloudlib

[Bug] Need to better handle erorr when pubkey auth fails but password auth is enabled

Open
#408 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
22
Forks
42
PR merge metrics
No merged PRs in 30d

Description

The following happened to me on Oracle Cloud when using an existing instance with no `~/.ssh/authorized_keys` BUT password authentication enabled:
```bash
Traceback (most recent call last):
File "/home/a-dubs/work/pycloudlib/pycloudlib/instance.py", line 441, in _ssh_connect
client.connect(
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/client.py", line 485, in connect
self._auth(
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/client.py", line 818, in _auth
raise saved_exception
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/client.py", line 788, in _auth
key = self._key_from_filepath(
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/client.py", line 638, in _key_from_filepath
key = klass.from_private_key_file(key_path, password)
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/pkey.py", line 421, in from_private_key_file
key = cls(filename=filename, password=password)
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/ed25519key.py", line 65, in __init__
signing_key = self._parse_signing_key_data(data, password)
File "/home/a-dubs/.virtualenvs/pycloudlib-lvxe/lib/python3.10/site-packages/paramiko/ed25519key.py", line 114, in _parse_signing_key_data
raise SSHException("Invalid key")
paramiko.ssh_exception.SSHException: Invalid key

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/a-dubs/work/pycloudlib/oracle-ipv6-automation.py", line 182, in
create_ipv6_snapshot_with_custom_cloud_init_code(
File "/home/a-dubs/work/pycloudlib/oracle-ipv6-automation.py", line 87, in create_ipv6_snapshot_with_custom_cloud_init_code
print(instance.execute("hostname"))
File "/home/a-dubs/work/pycloudlib/pycloudlib/instance.py", line 276, in execute
return self._run_command(command, stdin, **kwargs)
File "/home/a-dubs/work/pycloudlib/pycloudlib/instance.py", line 233, in _run_command
return self._ssh(list(command), stdin=stdin)
File "/home/a-dubs/work/pycloudlib/pycloudlib/instance.py", line 391, in _ssh
client = self._ssh_connect()
File "/home/a-dubs/work/pycloudlib/pycloudlib/instance.py", line 457, in _ssh_connect
raise SSHException from e
paramiko.ssh_exception.SSHException
```

This output is incredibly unhelpful and should definitely be intercepted better and a proper error message be displayed.

Adding my ssh key to the `~/.ssh/authorized_keys` on the instance and then re-running my script made this issue go away.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.