Subject: CVS commit: pkgsrc/security/py-paramiko
From: Adam Ciarcinski
Date: 2023-07-18 17:54:43
Message id: 20230718155444.1040CFBDB@cvs.NetBSD.org

Log Message:
py-paramiko: updated to 3.2.0

3.2.0 2023-05-25
[Feature]: PKey grew a new .fingerprint property which emits a fingerprint \ 
string matching the SHA256+Base64 values printed by various OpenSSH tooling (eg \ 
ssh-add -l, ssh -v). This is intended to help troubleshoot Paramiko-vs-OpenSSH \ 
behavior and will eventually replace the venerable get_fingerprint method.

[Feature]: PKey grew a new .algorithm_name property which displays the key \ 
algorithm; this is typically derived from the value of get_name. For example, \ 
ED25519 keys have a get_name of ssh-ed25519 (the SSH protocol key type field \ 
value), and now have a algorithm_name of ED25519.

[Feature]: PKey now offers convenience “meta-constructors”, static methods \ 
that simplify the process of instantiating the correct subclass for a given key \ 
input.

For example, PKey.from_path can load a file path without knowing a priori what \ 
type of key it is (thanks to some handy methods within our cryptography \ 
dependency). Going forwards, we expect this to be the primary method of loading \ 
keys by user code that runs on “human time” (i.e. where some minor \ 
efficiencies are worth the convenience).

In addition, PKey.from_type_string now exists, and is being used in some \ 
internals to load ssh-agent keys.

As part of these changes, PKey and friends grew an identifiers classmethod; this \ 
is inspired by the supported_key_format_identifiers classmethod (which now \ 
refers to the new method.) This also includes adding a .name attribute to most \ 
key classes (which will eventually replace .get_name().

[Feature]: Enhanced AgentKey with new attributes, such as:

Added a comment attribute (and constructor argument); Agent.get_keys() now uses \ 
this kwarg to store any comment field sent over by the agent. The original \ 
version of the agent feature inexplicably did not store the comment anywhere.
Agent-derived keys now attempt to instantiate a copy of the appropriate key \ 
class for access to other algorithm-specific members (eg key size). This is \ 
available as the .inner_key attribute.
Note
This functionality is now in use in Fabric’s new --list-agent-keys feature, as \ 
well as in Paramiko’s debug logging.
[Feature] Users of SSHClient can now configure the authentication logic Paramiko \ 
uses when connecting to servers; this functionality is intended for advanced \ 
users and higher-level libraries such as Fabric. See auth_strategy for details.

Fabric’s co-temporal release includes a proof-of-concept use of this feature, \ 
implementing an auth flow much closer to that of the OpenSSH client (versus \ 
Paramiko’s legacy behavior). It is strongly recommended that if this interests \ 
you, investigate replacing any direct use of SSHClient with Fabric’s \ 
Connection.

Warning
This feature is EXPERIMENTAL; please see its docs for details.
[Feature]: Implement _fields() on AgentKey so that it may be compared (via ==) \ 
with other PKey instances.

[Bug]: AgentKey had a dangling Python 3 incompatible __str__ method returning \ 
bytes. This method has been removed, allowing the superclass’ (PKey) method to \ 
run instead.

[Bug] Since its inception, Paramiko has (for reasons lost to time) implemented \ 
authentication as a side effect of handling affirmative replies to \ 
MSG_SERVICE_REQUEST protocol messages. What this means is Paramiko makes one \ 
such request before every MSG_USERAUTH_REQUEST, i.e. every auth attempt.

OpenSSH doesn’t care if clients send multiple service requests, but other \ 
server implementations are often stricter in what they accept after an initial \ 
service request (due to the RFCs not being clear). This can result in odd \ 
behavior when a user doesn’t authenticate successfully on the very first try \ 
(for example, when the right key for a target host is the third in one’s \ 
ssh-agent).

This version of Paramiko now contains an opt-in Transport subclass, \ 
ServiceRequestingTransport, which more-correctly implements service request \ 
handling in the Transport, and uses an auth-handler subclass internally which \ 
has been similarly adapted. Users wanting to try this new experimental code path \ 
may hand this class to SSHClient.connect as its transport_factory kwarg.

Warning
This feature is EXPERIMENTAL and its code may be subject to change.

In addition:
minor backwards incompatible changes exist in the new code paths, most notably \ 
the removal of the (inconsistently applied and rarely used) event arguments to \ 
the auth_xxx methods.
GSSAPI support has only been partially implemented, and is untested.
Note
Some minor backwards-compatible changes were made to the existing Transport and \ 
AuthHandler classes to facilitate the new code. For example, \ 
Transport._handler_table and AuthHandler._client_handler_table are now \ 
properties instead of raw attributes.
[Bug] The server-sig-algs and RSA-SHA2 features added around Paramiko 2.9 or so, \ 
had the annoying side effect of not working with servers that don’t support \ 
either of those feature sets, requiring use of disabled_algorithms to forcibly \ 
disable the SHA2 algorithms on Paramiko’s end.

The experimental ServiceRequestingTransport (noted in its own entry in this \ 
changelog) includes a fix for this issue, specifically by falling back to the \ 
same algorithm as the in-use pubkey if it’s in the algorithm list (leaving the \ 
“first algorithm in said list” as an absolute final fallback).

[Bug]: Fixed a very sneaky bug found at the apparently rarely-traveled \ 
intersection of RSA-SHA2 keys, certificates, SSH agents, and \ 
stricter-than-OpenSSH server targets. This manifested as yet another “well, if \ 
we turn off SHA2 at one end or another, everything works again” problem, for \ 
example with version 12 of the Teleport server endpoint.

This has been fixed; Paramiko tweaked multiple aspects of how it requests agent \ 
signatures, and the agent appears to do the right thing now.

Files:
RevisionActionfile
1.49modifypkgsrc/security/py-paramiko/Makefile
1.19modifypkgsrc/security/py-paramiko/PLIST
1.32modifypkgsrc/security/py-paramiko/distinfo