%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/duplicity/backends/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/ssh_paramiko_backend.cpython-312.pyc

�

�2e�L����ddlZddlZddlZddlZddlZddlZddlZddlmZddl	Z
ddl
mZddl
mZddl
m
Z
ddlmZdZGd�d	e
j"j$�Ze
j"j)d
e�e
j"j)de�e
j"j)de�e
j"j)d
e�e
j"j*j-gd��y)�N)�dedent)�config)�progress)�util)�BackendExceptionicc�H�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	dd�Z
d	�Zd
�Zy)
�SSHParamikoBackenda�This backend accesses files using the sftp or scp protocols.
    It does not need any local client programs, but an ssh server and the sftp
    program must be installed on the remote side (or with scp, the programs
    scp, ls, mkdir, rm and a POSIX-compliant shell).

    Authentication keys are requested from an ssh agent if present, then
    ~/.ssh/id_rsa/dsa are tried. If -oIdentityFile=path is present in
    --ssh-options, then that file is also tried. The passphrase for any of
    these keys is taken from the URI or FTP_PASSWORD. If none of the above are
    available, password authentication is attempted (using the URI or
    FTP_PASSWORD).

    Missing directories on the remote side will be created.

    If scp is active then all operations on the remote side require passing
    arguments through a shell, which introduces unavoidable quoting issues:
    directory and file names that contain single quotes will not work.
    This problem does not exist with sftp.
    c��
�tjjj||�d|_|j
r(t
jdd|j
d�|_nd|_tj�5tjd�	ddla	ddd�G�
fd�d	tj�}Gd
�dtj��
tj!�|_|j"j%|��|j"j'd�tj(j+d�}t-j.t0j2�}|j5t-j6d
��|j9|�t-j:d�j=�}|dkrt,j>}nR|dkrt,j@}n<|dkrt,jB}n&|dkrt,jD}nt,jF}|jI|�d}t
jJdtLjNtjP�}|�3|jSd�r|jSd�n|jSd�}	tTj
jW|�r|j"jY|�tTj
j_d�}
t
jJdtLjNtjP�}|�3|jSd�r|jSd�n|jSd�}
	tTj
jW|
�r|j"ja|
�n|
|j"_1	d|jdi|_&|jLjg|jid|jd��|jLjg|jid|jd��|jjr'|jLjgd|jji�d|jLvr/|jLjgdtmjn�i�|jpr'|jLjgd|jpi�d|jLvr4|jLjgdts|jLd�i�n|jLjgddi�t
jJdtLjNtjP�}|�Q|jSd�r|jSd�n|jSd�}|jud �|jLd!<d!|jLvr�tw|jLd!tx�s|jLd!g|jLd!<|jLd!D�cgc]!}tTj
j_|���#c}|jLd!<nd|jLd!<tLjz|_>|jLd|_5|jLd|_2tjj|j�d"�|_@|j�d#k(|_A|j��y#t$r�wxYw#1swY��bxYw#tZ$r}	t]d|�d���d}	~	wwxYw#tZ$r}	t]d|
�d���d}	~	wwxYwcc}w)$N�
z^/���.�ignorerc���eZdZdZ�fd�Zy)�4SSHParamikoBackend.__init__.<locals>.AgreedAddPolicyz�
            Policy for showing a yes/no prompt and adding the hostname and new
            host key to the known host file accordingly.

            This class simply extends the AutoAddPolicy class with a yes/no
            prompt.
            c
�N��|j�j�}ddjd�tt	|ddd�|ddd���D����}t|d�r|d|j��z
}|j�j�}td�jdit���}	tjj|�t�j!�}|d	vr#t"j$j'||||�y|d
vr�	|��d}�m)
Nz  MD5:�:c3�>K�|]\}}t||z����y�w�N)�str)�.0�a�bs   �I/usr/lib/python3/dist-packages/duplicity/backends/ssh_paramiko_backend.py�	<genexpr>zXSSHParamikoBackend.__init__.<locals>.AgreedAddPolicy.missing_host_key.<locals>.<genexpr>fs����0g���1��Q��U��0g�s��r
�fingerprintz
  z�
                    The authenticity of host '{hostname}' can't be established.
                    {keyname} fingerprint is
                    {fingerprints}.
                    Are you sure you want to continue connecting (yes/no)? )�yes�y)�no�nzPlease type 'yes' or 'no': �)�get_fingerprint�hex�join�list�zip�hasattrr�get_name�upperr�format�locals�sys�stdout�write�input�lower�paramiko�
AutoAddPolicy�missing_host_key)
�self�client�hostname�key�md5�fingerprints�keyname�question�choice�AuthenticityExceptions
         �rr4zESSHParamikoBackend.__init__.<locals>.AgreedAddPolicy.missing_host_keycs&����)�)�+�/�/�1��!'����0g��S�QT�UX�WX�UX�QY�[^�_`�_c�bc�_c�[d�Me�Hf�0g�(g�'h�i���3�
�.� �d�3�?�?�*;�$<�<�L��,�,�.�.�.�0���6�O���&�
%�"�8�
%����J�J�$�$�X�.�"�W�]�]�_�F���-� �.�.�?�?��f�h�X[�\���;�.�3�H�=�=�#@���N)�__name__�
__module__�__qualname__�__doc__r4)r>s�r�AgreedAddPolicyrZs���
�
Ar?rDc��eZdZd�Zy)�:SSHParamikoBackend.__init__.<locals>.AuthenticityExceptionc�L�tjj|d|�d��y)Nz!Host key verification for server z failed.)r2�SSHException�__init__)r5r7s  rrIzCSSHParamikoBackend.__init__.<locals>.AuthenticityException.__init__~s%���%�%�.�.�t�7X�Ya�Xb�bj�5k�lr?N)r@rArBrIr"r?rr>rF}s��
mr?r>�
sshbackendzssh: %(message)s�	duplicity���	z/etc/ssh/ssh_known_hostsa;
                      ^(?:.+\s+)?
                      (?:-oGlobalKnownHostsFile=)
                      (
                          ([\"'])
                          ([^\\2]+)
                          \\2
                          |
                          [\S]+
                      )
                      �zcould not load z, maybe corrupt?z~/.ssh/known_hostsa9
                      ^(?:.+\s+)?
                      (?:-oUserKnownHostsFile=)
                      (
                          ([\"'])
                          ([^\\2]+)
                          \\2
                          |
                          [\S]+
                      )
                      r7z/etc/ssh/ssh_configz
~/.ssh/config�user�port�a
                      ^(?:.+\s+)?
                      (?:-oIdentityFile=|-i\s+)
                      (([\"'])
                      (
                          [^\\2]+)\\2
                          |
                          [\S]+
                      )
                      z'"�identityfiler2�scp)CrK�backend�BackendrI�retry_delay�path�re�sub�
remote_dir�warnings�catch_warnings�simplefilterr2�ImportErrorr3rH�	SSHClientr6�set_missing_host_key_policy�set_log_channelr�
get_logger�logging�
StreamHandlerr-�stderr�setFormatter�	Formatter�
addHandler�	getLogger�getEffectiveLevel�DEBUG�INFO�WARNING�ERROR�CRITICAL�setLevel�searchr�ssh_options�VERBOSE�group�os�isfile�load_system_host_keys�	Exceptionr�
expanduser�load_host_keys�_host_keys_filenamer7�update�
gethostconfig�username�getpass�getuserrQ�int�strip�
isinstancer&�ssh_askpass�use_getpass�strip_prefix�scheme�use_scp�connect)r5�
parsed_urlrD�ours�dest�plevel�wanted�global_known_hosts�m�e�user_known_hosts�keyfilename�ir>s             @rrIzSSHParamikoBackend.__init__Bs����	���!�!�*�*�4��<�����?�?� �f�f�U�C����!�D�D�O�!�D�O��
$�
$�
&�	��!�!�(�+�
��	�!	A�h�4�4�!	A�F	m�H�$9�$9�	m��(�(�*������/�/��0A�B�	
���#�#�L�1��}�}�'�'��5���$�$�S�Z�Z�0�����'�+�+�,>�?�@������
�"�"�;�/�A�A�C���Q�;��]�]�F�
�q�[��\�\�F�
�q�[��_�_�F�
�q�[��]�]�F��%�%�F��
�
�f��8���I�I�

�
����J�J�
��
�=�/0�w�w�q�z������q�w�w�q�z��	[��w�w�~�~�0�1����1�1�2D�E��7�7�-�-�.B�C���I�I�

�
����J�J�
��
�=�-.�W�W�Q�Z�q�w�w�q�z�Q�W�W�Q�Z��	Y��w�w�~�~�.�/����*�*�+;�<�2B����/�	�"�:�#6�#6�7��������4�-�-�.C�Z�EX�EX�Y�Z������4�-�-�o�z�?R�?R�S�T�����K�K����
�(;�(;�<�=�����$��K�K�������(9�:�;��?�?��K�K����
���8�9��T�[�[� ��K�K�����D�K�K��,?�(@�A�B��K�K�����|�,��I�I�	
�
����J�J�

��
�=�()����
�!�'�'�!�*�����
�K�*5�*;�*;�E�*B�D�K�K��'��T�[�[�(��d�k�k�.�9�4�@�04�{�{�>�/J�.K����N�+�JN�+�+�Vd�Je�*f�Q�2�7�7�+=�+=�a�+@�*f�D�K�K��'�*.�D�K�K��'�"�-�-���"�k�k�&�1�
��"�k�k�*�5�
���'�'�4�4�Z�5F�5F�
�S����{�{�e�+��������C�
��
��		�	��@�	[�"�_�5G�4H�HX�#Y�Z�Z��	[��8�	Y�"�_�5E�4F�FV�#W�X�X��	Y��x+gsU�[>�[0�,:\�.A\+�&]�0[;�;[>�>\�	\(�\#�#\(�+	]�4]�]c�@�|j�}	|jj|jd|jd|jd|dd|jd��|jj�jt
tjdz��|jrMtjd|j�rtd
��|jd|j�d�dd�y	|jj�|_|jj#t$j&�}t)|�dkDrS|ddk(rd|d<|D]@}|dk(r�		|j j+|�}	|j j7|��Byy#t$rL}td|jd�d|jd�d	t
|jd��d
|����d}~wwxYw#t$r}td|����d}~wwxYw#t,$r�}|j.t.j0k(r[	|j j3|�nk#t$r2}td|j j5d��d|�d
|����d}~wwxYwtd|j j5d��d|�d
|����Yd}~��Kd}~wwxYw#t$r2}td|j j5d��d|�d
|����d}~wwxYw)Nr7rQrPTrS)r7rQr�password�allow_agent�
look_for_keys�key_filenamezssh connection to �@r�	 failed: r�'z9cannot handle directory names with single quotes with scpz
mkdir -p 'Fz
scp mkdir zsftp negotiation failed: rr�/zsftp mkdir rz
sftp stat zsftp chdir to )�get_passwordr6r�rryrr��
get_transport�
set_keepalive�timeoutr�rYrrr[�	runremote�	open_sftp�sftp�splitrv�sep�len�stat�IOError�errno�ENOENT�mkdir�	normalize�chdir)r5r�r��dirs�d�attrss      rr�zSSHParamikoBackend.connects	���$�$�&��	��K�K������Z�0��[�[��(����V�,�!� �"�!�[�[��8�
 �
�	
���!�!�#�1�1�#�f�n�n�q�6H�2I�J��<�<��y�y��d�o�o�.�&�'b�c�c�
�N�N�Z����'8��:�E�<�P�
H� �K�K�1�1�3��	�
�?�?�(�(����0�D��4�y�1�}���7�b�=�!�D��G��l�A��B�w� �	l� $�	�	���q� 1��l��	�	����*�l���1�	�"�$��;�;�v�&�'�q����Z�)@�(A��3�t�{�{�SY�GZ�C[�B\�]��#���
��	��&�
H�&�)B�1�#�'F�G�G��
H��#�l��7�7�e�l�l�2�q� $�	�	���� 2��#,�q�&6��T�Y�Y�EX�EX�Y\�E]�D^�^_�`a�_b�bk�lm�kn�7o�&p� p��q��#3�Z��	�	�@S�@S�TW�@X�?Y�YZ�[\�Z]�]f�gh�fi�3j�"k�k�	!3��l��%�l�.���	�	�@S�@S�TW�@X�?Y�YZ�[\�Z]�]f�gh�fi�/j�k�k��l�s��AF/�H�4H&�K"�/	H�8AG?�?H�	H#�H�H#�&	K�/K�
I)�(K�)	J$�2-J�J$�$0K�K�"	L�+-L�Lc	��tj|�}|j�r
t|jd�}	|j
j
�j�}|jtj�|jd|j�d��|jd�}|dk7rtd|jd�z��tj |j�}|j#d	t%|j&�d
d�dt)|j*��d|�d��|jd�}|dk7rtd|jd�z��d
}|j*}	||	krL|j-|j/d��|j1�}t3j4||	�||	kr�L|j-d�|j7�|jd�}|dk7rtd|jd�����|j7�y|j8j;|j|t2j4��y#t$r}td|����d}~wwxYw)N�rbzscp -t 'r��scp execution failed: r
�sscp remote error: %b����C���� �
ri@zscp remote error: )�callback)rv�fsdecoder��open�namer6r��open_session�
settimeoutrr��exec_commandr[ryr�recvr��send�oct�st_moder��st_size�sendall�read�tellr�report_transfer�closer��put)
r5�source_path�remote_filename�f�chanr��response�fstat�file_pos�	file_sizes
          r�_putzSSHParamikoBackend._putTs���+�+�o�6���<�<��[�%�%�t�,�A�
E��{�{�0�0�2�?�?�A��������/��!�!�H�T�_�_�,=�Q�"?�@��y�y��|�H��5� �&�'>����2��'N�O�O��G�G�K�,�,�-�E��I�I��#�e�m�m�,�R�S�1�2�!�C��
�
�4F�3G�q��HY�Y[�\�]��y�y��|�H��5� �&�'>����2��'N�O�O��H��
�
�I��Y�&����Q�V�V�E�]�+��6�6�8���(�(��9�=��Y�&�
�L�L���
�G�G�I��y�y��|�H��5� �&�);�D�I�I�b�M�?�'K�L�L��J�J�L��I�I�M�M�+�*�*�O�h�F^�F^�M�_��5�
E�&�)?��s�'C�D�D��
E�s�A&I$�$	J�-I;�;Jc��tj|�}|j�r�	|jj	�j�}|j
tj�|jd|j�d|�d��|jd�|jd�}t|t �r|j#�}t%j&d|�}|�|j)d�|k7rtd	|�d
|�d���|jd�t+|j)d��}|}t-|j.d
�}	|jd�	|dkDrH|t0kDrt0}
n|}
|j|
�}|	j3|�|t5|�z}|dkDr�H|jd�}|dk7r td	|�d|jd�����|	j7�|jd�|j7�y|j8j;||j.�y#t$r}td|����d}~wwxYw#t$r}td	|�d|����d}~wwxYw)Nzscp -f 'r�r�r��r�zC([0-7]{4})\s+(\d+)\s+(\S.*)$rOzscp get z failed: incorrect response 'r
r�wbrr�r�)rvr�r�r6r�r�r�rr�r�r[ryrr�r�r��bytes�decoderY�matchrur�r�r��read_blocksizer/r�r�r��get)r5r��
local_pathr�r��msgr��size�togor��	blocksize�buffs            r�_getzSSHParamikoBackend._getzs(���+�+�o�6���<�<�
E��{�{�0�0�2�?�?�A��������/��!�!�H�T�_�_�,=�Q��>O�q�"Q�R�
�I�I�d�O��)�)�B�-�C��#�u�%��j�j�l�����9�3�?�A��y�A�G�G�A�J�/�9�&��/�1B�B_�`c�_d�de�'f�g�g��I�I�a�L��q�w�w�q�z�?�D��D��Z�_�_�d�+�A��I�I�d�O�

Q��Q�h��n�,�$2�	�$(�	��9�9�Y�/�D��G�G�D�M��C��I�%�D��Q�h��)�)�A�,�C��e�|�&��/�1B�)�D�I�I�VX�M�?�'[�\�\�
�G�G�I��I�I�d�O��J�J�L��I�I�M�M�/�:�?�?�;��G�
E�&�)?��s�'C�D�D��
E��2�
Q�&��/�1B�)�A�3�'O�P�P��
Q�s1�A)H>�"AI�>	I�I�I�	I<�&I7�7I<c��|jr1|jd|j�d�dd�}|j�S|jj�S)Nzls -1 'r�Fzscp dir listing )r�r�r[�
splitlinesr��listdir)r5�outputs  r�_listzSSHParamikoBackend._list�sN���<�<��^�^�g�d�o�o�->�a�$@�%�I[�\�F��$�$�&�&��9�9�$�$�&�&r?c���tj|�}|jr%|jd|j�d|�d�dd�y|j
j
|�y)Nzrm 'r�r�Fzscp rm )rvr�r�r�r[r��remove)r5�filenames  r�_deletezSSHParamikoBackend._delete�sO���;�;�x�(���<�<��N�N�T�$�/�/�!2�!�H�:�Q�?��	�R��I�I���X�&r?c
��	|jj|dtj�\}}}|j	d�}|S#t
$r2}|s&t
|�d|�dtj|�����Yd}~yd}~wwxYw)z�small convenience function that opens a shell channel, runs remote
        command and returns stdout of command. throws an exception if exit
        code!=0 and not ignoredr�zfailed: z 
 N)	r6r�rr�r�ryrr�uexc)	r5�cmd�ignoreexitcode�errorprefix�ch_in�ch_out�ch_errr�r�s	         rr�zSSHParamikoBackend.runremote�s|��	X�$(�K�K�$<�$<�S�"�f�n�n�$U�!�E�6�6��[�[��_�F��M���	X�!�&�+��h�s�e�4��	�	�RS��~�'V�W�W�"��	X�s�AA�	A?�
(A:�:A?c�B�tjj|�}tjj|�siStj�}	|j
t|��|j|�S#t$r}td|�d���d}~wwxYw)Nzcould not load 'z', maybe corrupt?)rvrXrzrwr2�	SSHConfig�parser�ryr�lookup)r5�file�host�	sshconfigr�s     rr~z SSHParamikoBackend.gethostconfig�s����w�w�!�!�$�'���w�w�~�~�d�#��I��&�&�(�	�	O��O�O�D��J�'�����%�%���	O�"�%5�d�V�;L�#M�N�N��	O�s�B�	B�
B�Bc�X�|jj�|j�yr)r6r�r�)r5s r�_retry_cleanupz!SSHParamikoBackend._retry_cleanup�s�����������r?N)Fr)
r@rArBrCrIr�r�r�r�r�r�r~r�r"r?rr	r	-s<���(V�p8l�t$`�L+<�Z'�'�
X�&�r?r	r�rT�
paramiko+sftp�paramiko+scp)r�rTrr)r�r�rdrvrYr-r\�textwrapr�duplicity.backendrKrrr�duplicity.errorsrr�rUrVr	�register_backend�uses_netloc�extendr"r?r�<module>rs���2
���	�	�
�������-���h��*�*�2�2�h�V

���"�"�6�+=�>�	���"�"�5�*<�=�	���"�"�?�4F�G�	���"�"�>�3E�F�	�����$�$�%U�Vr?

Zerion Mini Shell 1.0