HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/config/__pycache__/cc_ssh.cpython-38.pyc
U

Ӈg,�
@s�UdZddlZddlZddlZddlZddlZddlmZmZm	Z	ddl
mZmZm
Z
mZddlmZddlmZddlmZddlmZmZdd	lmZd
egegd�Zeed<e�e�Zd
ddgZdgZ e�!d�Z"dZ#dZ$gZ%ee&ed<iZ'iZ(eD]dZ)e'�*e)�d�e#e)dfe)�d�e#e)�d�dfe)�d�e#e)�d�dfi�e)�d�e(e)�d�<q�dZ+e&dd�dd�Z,e&eee-dd�d d!�Z.d"d#�Z/d'ee	e&d$�d%d&�Z0dS)(zSSH: Configure SSH and SSH keys�N)�List�Optional�Sequence)�	lifecycle�ssh_util�subp�util)�Cloud)�Config)�
MetaSchema)�ALL_DISTROS�ug_util)�PER_INSTANCEZcc_ssh)�idZdistrosZ	frequencyZactivate_by_schema_keys�metaZrsaZecdsaZed25519z4^(ecdsa-sk|ed25519-sk)_(private|public|certificate)$z/etc/ssh/ssh_host_%s_keyT�HOST_KEY_PUBLISH_BLACKLISTZ_private�Z_public�.pub��_certificatez	-cert.pubz;o=$(ssh-keygen -yf "%s") && echo "$o" root@localhost > "%s")�keyfile�returncCsld}t��}|r&|t�dd�kr&d}nd}t�d�}|dkrJt�|d|�t�||�t�|�d�|�d	S)
a�
    For fedora 37, centos 9 stream and below:
     - sshd version is earlier than version 9.
     - 'ssh_keys' group is present and owns the private keys.
     - private keys have permission 0o640.
    For fedora 38, centos 10 stream and above:
     - ssh version is atleast version 9.
     - 'ssh_keys' group is absent. 'root' group owns the keys.
     - private keys have permission 0o600, same as upstream.
    Public keys in all cases have permission 0o644.
    r�	ri�r�ssh_keys���rN)	rZget_opensshd_upstream_versionrZVersionrZget_group_id�os�chown�chmod)rZpermissions_publicZssh_versionZpermissions_private�gid�r�9/usr/lib/python3/dist-packages/cloudinit/config/cc_ssh.py�set_redhat_keyfile_perms@s
r!)�name�cfg�cloud�argsrc$Cs�|�dd�r\tj�dd�}t�|�D]6}zt�|�Wq$tk
rXt�t	d|�Yq$Xq$d|k�r�g}|d�
�D]t\}}|tkr�t�
|�r�d}	nd}	t	�d	|	|�qvt|d
}
t|d}t�|
||�d|krv|�d
t|
�f�qv|r�t�|�t�
�D]�\}}
|
|dk�s||dk�r*�qt|d
t|
d
}}ddt||fg}z:tjddd��tj|dd�W5QRXt	�d||�Wn.tk
�r�t�t	d|�d|���YnX�q�n|t�|dt�}t���s�|ndd�|D�}t|��|�}|�rt	�dd�|��|D�]$}t|}tj�|��r<�qt� tj�!|��dd|ddd |g}tjddd���zTtj|dd!d"id#�\}}t�"|d$d��s�t#j$�%t�&|��|j'j(d%k�r�t)|�Wnptj*k
�r4}zNt�&|j+��,�}|j-dk�r|�,��.d&��rt	�d'|�nt�t	d(||�W5d}~XYnXW5QRX�qd)|k�rtt�|d)d*t/�}t�"|d)d+t0�}nt/}t0}|�r�t1|d,�}z|j2�3|�Wn"tk
�r�t�t	d-�YnXz�t4�5||j'�\}}t4�6|�\}}t�"|d.d�} t�7|d/tj8�}!g}"t�"|d0d��r$|�9��p g}"n
t	�d1�d2|k�rJ|d2}#|"�:|#�t;|"|| |!�Wn"tk
�r|t�t	d3�YnXdS)4NZssh_deletekeysTz	/etc/ssh/zssh_host_*key*zFailed deleting key file %srZunsupportedZunrecognizedz Skipping %s ssh_keys entry: "%s"r�rZHostCertificateZshz-xcz/etc/ssh)�	recursiveF)�capturezGenerated a key for %s from %szFailed generating a key for z from Zssh_genkeytypescSsg|]}|tkr|�qSr)�FIPS_UNSUPPORTED_KEY_NAMES)�.0�namesrrr �
<listcomp>�s�zhandle.<locals>.<listcomp>z5skipping keys that are not supported in fips mode: %s�,z
ssh-keygenz-tz-N�z-fZLANG�C)r(Z
update_envZssh_quiet_keygenZredhatzunknown keyz!ssh-keygen: unknown key type '%s'z(Failed generating key type %s to file %sZssh_publish_hostkeys�	blacklist�enabled�r0zPublishing host keys failed!�disable_root�disable_root_optsZallow_public_ssh_keyszSSkipping import of publish SSH keys per config setting: allow_public_ssh_keys=FalseZssh_authorized_keysz Applying SSH credentials failed!)<�getr�path�join�globrZdel_file�	ExceptionZlogexc�LOG�items�CONFIG_KEY_TO_FILE�pattern_unsupported_config_keys�matchZwarningZ
write_file�append�strrZappend_ssh_config�PRIV_TO_PUB�KEY_GEN_TPLZSeLinuxGuardr�debugZget_cfg_option_list�GENERATE_KEY_NAMESZfips_enabled�set�
difference�KEY_FILE_TPL�existsZ
ensure_dir�dirnameZget_cfg_option_bool�sys�stdout�writeZ
decode_binaryZdistroZosfamilyr!ZProcessExecutionError�stderr�lowerZ	exit_code�
startswithr�PUBLISH_HOST_KEYS�get_public_host_keysZ
datasourceZpublish_host_keysr
Znormalize_users_groupsZextract_defaultZget_cfg_option_strZDISABLE_USER_OPTSZget_public_ssh_keys�extend�apply_credentials)$r"r#r$r%Zkey_pth�fZcert_config�key�val�reasonZtgt_fnZ	tgt_permsZprivate_typeZpublic_typeZprivate_fileZpublic_file�cmdZgenkeysZ	key_namesZskipped_keysZkeytyper�out�err�eZhost_key_blacklistZpublish_hostkeysZhostkeysZusersZ_groups�userZ_user_configr3r4�keysZcfgkeysrrr �handleds



�
�

�������	�
�
���$
��
��

r^cCsVt|�}|rt�||�|r>|s$d}|�d|�}|�dd�}nd}tj|d|d�dS)NZNONEz$USERz
$DISABLE_USER�rootr.)Zoptions)rErZsetup_user_keys�replace)r]r\r3r4Z
key_prefixrrr rSsrSr2cs�dtf�g}g�|r(�fdd�|D���fdd�t��d�D�}|D]<}t�|�}|��}|rHt|�dkrH|�t|dd���qH|S)	aRead host keys from /etc/ssh/*.pub files and return them as a list.

    @param blacklist: List of key types to ignore. e.g. ['rsa']
    @returns: List of keys, each formatted as a two-element tuple.
        e.g. [('ssh-rsa', 'AAAAB3Nz...'), ('ssh-ed25519', 'AAAAC3Nx...')]
    z%s.pubcsg|]}�|f�qSrr)r*Zkey_type)�public_key_file_tmplrr r, sz(get_public_host_keys.<locals>.<listcomp>csg|]}|�kr|�qSrr)r*Zhostfile)�blacklist_filesrr r,$s�)�*r&N�)rGr8rZload_text_file�split�lenr?�tuple)r0Zkey_listZ	file_list�	file_nameZ
file_contentsZkey_datar)rbrar rQs 

�
�
rQ)N)1�__doc__r8Zloggingr�rerJ�typingrrrZ	cloudinitrrrrZcloudinit.cloudr	Zcloudinit.configr
Zcloudinit.config.schemarZcloudinit.distrosrr
Zcloudinit.settingsrr�__annotations__Z	getLogger�__name__r:rDr)�compiler=rGrPrr@r<rA�k�updaterBr!�listr^rSrQrrrr �<module>sZ�

�
��$