
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼meÞ  ã            	   @   sò   U d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZ ddlmZ dd	lmZ d
Zdddeegeddgg dœZeeeƒZ ejeƒZdd„ Zddd„Zdd„ Zddd„Zee
eeddœdd„Z dS ) z;SSH AuthKey Fingerprints: Log fingerprints of user SSH keysé    N)Ússh_utilÚutil)ÚCloud)ÚConfig)Ú
MetaSchemaÚget_meta_doc)ÚALL_DISTROSÚug_util)ÚPER_INSTANCE)ÚSimpleTablezÔWrite fingerprints of authorized keys for each user to log. This is enabled by
default, but can be disabled using ``no_ssh_fingerprints``. The hash type for
the keys can be specified, but defaults to ``sha256``.
Zcc_ssh_authkey_fingerprintszSSH AuthKey Fingerprintsz!Log fingerprints of user SSH keyszno_ssh_fingerprints: truezauthkey_hash: sha512)ÚidÚnameÚtitleÚdescriptionZdistrosZ	frequencyZexamplesZactivate_by_schema_keysc             C   s8   g }x.t dt| ƒdƒD ]}|j| ||d … ƒ qW |S )Nr   é   )ÚrangeÚlenÚappend)Zbin_hashZsplit_upÚi© r   ú1/usr/lib/python3.6/cc_ssh_authkey_fingerprints.pyÚ_split_hash,   s    r   Úsha256c             C   sR   | sdS y,t j|ƒ}|jtj| ƒƒ djt|jƒ ƒƒS  tt	fk
rL   dS X d S )NÚ ú:ú?)
ÚhashlibÚnewÚupdateÚbase64Z	b64decodeÚjoinr   Z	hexdigestÚ	TypeErrorÚ
ValueError)Zb64_textÚ	hash_methZhasherr   r   r   Ú_gen_fingerprint3   s    
r$   c             C   s:   t | j| j| j| jgƒr6| jr6| jjƒ jƒ tjkr6dS dS )NTF)	ÚanyÚkeytyper   ÚcommentÚoptionsÚlowerÚstripr   ZVALID_KEY_TYPES)Úentryr   r   r   Ú_is_printable_keyB   s
    r,   ú	ci-info: c             C   sò   |s$d|| f }t j|ddd� d S dd| ddg}t|ƒ}xH|D ]@}t|ƒrB|jpVd	t|j|ƒpdd	|jpld	|jptd	g}	|j	|	ƒ qBW |j
ƒ }
|
jƒ }tt|td
�ƒ}t jd|| f d|ƒg}|j|ƒ x$|D ]}t jd||f ddd� qÎW d S )Nz9%sno authorized SSH keys fingerprints found for user %s.
TF)ÚconsoleÚstderrZKeytypezFingerprint (%s)ZOptionsÚCommentú-)Úkeyz#Authorized keys from %s for user %sú+z%s%s
)Útextr/   r.   )r   Z	multi_logr   r,   r&   r$   r   r(   r'   Zadd_rowZ
get_stringÚ
splitlinesr   ÚmaxÚcenterÚextend)ÚuserÚkey_fnÚkey_entriesr#   ÚprefixÚmessageZ
tbl_fieldsZtblr+   ÚrowZ	authtbl_sZauthtbl_linesZmax_lenÚlinesÚliner   r   r   Ú_pprint_key_entriesL   s8    




rA   )r   ÚcfgÚcloudÚargsÚreturnc             C   sš   t j|jddƒƒr"tjd| ƒ d S t j|ddƒ}tj||jƒ\}}xR|j	ƒ D ]F\}}|jdƒsh|jdƒrvtjd|ƒ qLt
j|ƒ\}	}
t||	|
|ƒ qLW d S )	NZno_ssh_fingerprintsFz>Skipping module named %s, logging of SSH fingerprints disabledZauthkey_hashr   Zno_create_homeÚsystemzXSkipping printing of ssh fingerprints for user '%s' because no home directory is created)r   Zis_trueÚgetÚLOGÚdebugZget_cfg_option_strr	   Znormalize_users_groupsZdistroÚitemsr   Zextract_authorized_keysrA   )r   rB   rC   rD   r#   ZusersZ_groupsZ	user_nameZ_cfgr:   r;   r   r   r   Úhandlew   s    rK   )r   )r   r-   )!Ú__doc__r   r   ZloggingZ	cloudinitr   r   Zcloudinit.cloudr   Zcloudinit.configr   Zcloudinit.config.schemar   r   Zcloudinit.distrosr   r	   Zcloudinit.settingsr
   Zcloudinit.simpletabler   ZMODULE_DESCRIPTIONÚmetaZ	getLoggerÚ__name__rH   r   r$   r,   rA   ÚstrÚlistrK   r   r   r   r   Ú<module>   s6   


*