HOME


Mini Shell 1.0
DIR: /usr/lib/python3/dist-packages/twisted/conch/scripts/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/twisted/conch/scripts/__pycache__/tkconch.cpython-312.pyc
�

Ϫ�f�\��>�dZddlZddlZddlZddlZddlZddlZddlZddl	m
Zddlm
ZddlmZmZddlmZddlmZddlmZmZmZmZmZmZmZmZddlm Z ddl!m"Z"m#Z#m$Z$m%Z%dd	l&m'Z'm(Z(Gd
�dejR�Z*Gd�d
e(jV�Z,da-da.da/da0d�Z1d�Z2d�Z3Gd�de#jh�Z5Gd�dejl�Z6Gd�dejn�Z7Gd�dejp�Z8Gd�dejr�Z:e;dk(re2�yy)z2
Implementation module for the `tkconch` command.
�N)�List�Tuple)�error)�isInKnownHosts)�channel�common�
connection�
forwarding�keys�session�	transport�userauth)�tkvt100)�defer�protocol�reactor�	tksupport)�log�usagec�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�TkConchMenuc�*
�tjj|g|��i|��|jj	d�tj
�|_|jjd�tj|ddd��jddd��tj|�|_|jjd	d	dd
��tj|ddd��jdd	d��tj|�|_|jjd	d	d	d
��tj|ddd
��jddd��tj|�|_
|jjd	d	dd
��tj|ddd��jddd��tj|�|_|jjd	d	dd
��tj|ddd��jddd��tj|�|_|jjd	dd
��tj ||j"d��jddd
��tj|d��jddd��tj$|dd��|_|j&jd	d	dd
��tj |d|j(��jdd��tj |d|j*��jdd��tj|�|_|j,jd	dd
��tj|d��jddd
��tj|�|_|j.jd	dd
��tj|d ��jddd
��tj0|d!|jd�"�|_|j2jd	d#��tj0|d$|jd%�"�|_|j4jdd#��tj|d&��jddd'd
��tj|ddd(��jdd)d��tj|d*�+�|_|j6jd	d	d)d
��tj|ddd,��jdd-d��tj|d.�+�|_|j8jd	d	d-d
��tj|ddd/��jdd0d��tj|d1�+�|_|j:jd	d	d0d
��tj |d2|j<��jddd3d
��|j?ddd4�5�|jAd	dd	�5�|jjCd6tDjF�y)7N�TkConch�local�w�left�Hostname)�anchor�justify�text�)�column�row�sticky��nesw)r"�
columnspanr#r$�Port�Username��Command��Identity��Browse)�commandr zPort Forwarding)r �r)�height�width�Add)r r0�)r"r#�Remove��Host�Local)r �variable�value�	�Remote�remotezAdvanced Options�
�Cipher��cipher)�name�MAC��maczEscape Char�
�escapezConnect!��@)�weight�minsize�WM_DELETE_WINDOW)$�Tkinter�Frame�__init__�master�title�	StringVar�localRemoteVar�set�Label�grid�Entry�host�port�userr0�identity�Button�getIdentityFile�Listbox�forwards�
addForward�
removeForward�forwardPort�forwardHost�Radiobutton�localForward�
remoteForwardrBrFrH�	doConnect�grid_rowconfigure�grid_columnconfigurer�sys�exit)�self�args�paramss   �?/usr/lib/python3/dist-packages/twisted/conch/scripts/tkconch.pyrPzTkConchMenu.__init__'s����
�
���t�5�d�5�f�5������)�$�%�/�/�1���������(��
�
�d�3��Z�H�M�M��!�C�	N�	
��M�M�$�'��	��	�	���a�A�1�V��D��
�
�d�3��V�D�I�I��!�C�	J�	
��M�M�$�'��	��	�	���a�A�1�V��D��
�
�d�3��Z�H�M�M��!�C�	N�	
��M�M�$�'��	��	�	���a�A�1�V��D��
�
�d�3��Y�G�L�L��!�C�	M�	
��}�}�T�*���������q�a���G��
�
�d�3��Z�H�M�M��!�C�	N�	
� �
�
�d�+��
��
�
���!��6��:����t�T�%9�%9��I�N�N��!�F�	O�	
�	�
�
�d�!2�3�8�8��q�QT�8�U�����Q�a�@��
��
�
���!��q���H����t�%����A�F�F�a�UV�F�W����t�(�D�4F�4F�G�L�L��!�	M�	
�#�=�=��.��������Q�A�f��=��
�
�d��(�-�-�Q�A�f�-�M�"�=�=��.��������Q�A�f��=��
�
�d��(�-�-�Q�A�f�-�M�#�/�/��w��)<�)<�G�
���	
�����a�Q��/�$�0�0��x�$�*=�*=�X�
���	
�����q�a��0��
�
�d�!3�4�9�9����6�	:�	
�	�
�
�d�3��X�F�K�K��"�S�	L�	
��m�m�D�x�8���������a�R���G��
�
�d�3��U�C�H�H��"�S�	I�	
��=�=��E�2������
�
�Q�1�"�V�
�D��
�
�d�3��]�K�P�P��"�S�	Q�	
��m�m�D�x�8���������a�R���G����t�*�d�n�n�E�J�J����6�	K�	
�
	
���q��B��7��!�!�!�A�q�!�9������/����:�c���tj�}|rU|jjdtj
�|jj
tj
|�yy�Nr)�tkFileDialog�askopenfilenamer\�deleterN�END�insert)rm�rs  rpr^zTkConchMenu.getIdentityFile�sH���(�(�*����M�M� � ��G�K�K�0��M�M� � ����a�0�
rqc��|jj�}|jjdtj�|j
j�}|j
jdtj�|jj�dk(r1|jjtjd|�d|���y|jjtjd|�d|���y)Nrr�L:�:�R:)	rc�getrvrNrwrdrTr`rx)rmrZrYs   rprazTkConchMenu.addForward�s������#�#�%��������7�;�;�/����#�#�%��������7�;�;�/����"�"�$��/��M�M� � �����4�&��$��.@�A��M�M� � �����4�&��$��.@�Arqc�z�|jj�}|r|jj|d�yyrs)r`�curselection�remove)rm�curs  rprbzTkConchMenu.removeForward�s2���m�m�(�(�*����M�M� � ��Q��(�rqc���d}|jj�td<|jj�td<|jj�td<|j
j�td<|jj�}|jj�}|jj�}|r7|tjvr
|gt_
ntjdd�d}|r9|tjvr
|gt_
n|rtjdd	�d}|r||d
k(r
dtd<nm|ddk(r0t|�d
k(r"tt!|d�dz
�td<n5t|�dk(r
|td<n|rtjdd|z�d}|j"j�r7tj$j'|j"j��|j(jdt*j,�D];}|ddk(rtj/|d
d��$tj1|d
d��=dtdvr*tdj3dd�\td<td<tdr	tds|rtjdd�d}|�rm|j4j7�|j4j9�tdr?t:j<}t?j@t:jB�|t:_nt?jD�tFt>_$tj$s
ddgt_td}tKtdxsd�}t?jL||f�tOjP||tS��tTj4jW�tTj4jYdj[tdtd��y|j]�y)Nr!rYrZr[r0rzBad cipher.rzBad MAC.�nonerH�^r%rJzBad escape character '%s'.�L�@zMissing host or username.rz
~/.ssh/id_rsaz
~/.ssh/id_dsa�z{}@{} - TkConch)/rYr~�optionsrZr[r0rBrFrH�SSHClientTransport�supportedCiphers�tkMessageBox�	showerror�
supportedMACs�len�chr�ordr\�	identitys�appendr`rNrw�opt_localforward�opt_remoteforward�splitrQ�quit�destroyrk�stdoutr�startLogging�stderr�discardLogs�handleError�deferr�int�msgr�
connectTCP�SSHClientFactory�frame�	deiconifyrR�format�focus)	rm�finishedrBrFrH�line�realoutrYrZs	         rprhzTkConchMenu.doConnect�sB�����)�)�-�-�/�����)�)�-�-�/�����)�)�-�-�/����!�\�\�-�-�/��	�������"���h�h�l�l�n�������"����+�<�<�<�7=�h�"�3��&�&�y�-�@�����(�6�6�6�47�5�"�0���&�&�y�*�=�������$(���!����c�!�c�&�k�Q�&6�$'��F�1�I���(;�$<���!��V���!�$*���!���&�&�y�2N�QW�2W�X����=�=�������$�$�T�]�]�%6�%6�%8�9��M�M�%�%�a����5�	4�D��A�w�#�~��(�(��a�b��2��)�)�$�q�r�(�3�		4��'�&�/�!�/6�v��/D�/D�S�!�/L�,�G�F�O�W�V�_����w�v��H��"�"�9�.I�J��H���K�K�����K�K���!��u�~��*�*��� � ����,�$��
����!�$�C�J��$�$�%4�o�$F��!��6�?�D��w�v��,�"�-�D��G�G�T�4�L�!����t�T�+;�+=�>��L�L�"�"�$��L�L���!�(�(����'�&�/�J�
�
�J�J�LrqN)�__name__�
__module__�__qualname__rPr^rarbrh�rqrprr&s��\;�|1�B�)�
Frqrc��eZdZUdZgd�gd�gd�gd�gd�gd�gd�gd	�gZgd
�gd�gd�gd
�gd�gd�gd�gd�gZejjZ	ejjZejdgeje	D��cgc]}|j���c}}�ejeD��cgc]}|j���c}}�ej d��ej d��d�ej"�ej d��ej dd��g��ZgZeeed<gZeeeeeeffed<gZeeeeeeffed<d�Zd�Zd �Zd!�Zd"�Zy#cc}}wcc}}w)$�GeneralOptionsz,Usage:    tkconch [options] host [command]
 )r[�lNzLog in using this user name.)r\�iz~/.ssh/identityz&Identity for public key authentication)rH�e�~z(Set escape character; ``none'' = disable)rB�cNzSelect encryption algorithm.)�macs�mNz.Specify MAC algorithms for protocol version 2.)rZ�pNz7Connect to this port.  Server must be on the same port.)�localforwardr�Nz<listen-port:host:port   Forward local port to remote address)�
remoteforward�RNz<listen-port:host:port   Forward remote port to local address)�tty�tz-Tty; allocate a tty even if command is given.)�notty�TzDo not allocate a tty.)�version�VzDisplay version number only.)�compress�CzEnable compression.)�noshell�Nz"Do not execute a shell or command.)�	subsystem�sz-Invoke command (mandatory) as SSH2 subsystem.)r�vz
Log to stderr)�ansilog�az!Print the received data to stdout)r�r�zlisten-port:host:port)�descr)rBr�r�r�r0�argumentT)r��repeat)�mutuallyExclusive�
optActions�extraActionsr��
localForwards�remoteForwardsc�:�|jj|�y�N)r�r�)rmr�s  rp�opt_identityzGeneralOptions.opt_identitys�������a� rqc��|jd�\}}}t|�}t|�}|jj|||ff�y�Nr|)r�r�r�r�)rm�f�	localPort�
remoteHost�
remotePorts     rpr�zGeneralOptions.opt_localforward sF��,-�G�G�C�L�)�	�:�z��	�N�	���_�
����!�!�9�z�:�.F�"G�Hrqc��|jd�\}}}t|�}t|�}|jj|||ff�yr�)r�r�r�r�)rmr�r��connHost�connPorts     rpr�z GeneralOptions.opt_remoteforward&sF��)*�����&�
�H�h���_�
��x�=�����"�"�J��8�0D�#E�Frqc�,�dgtjddy)N�zlibrr!)r��supportedCompressions�rms rp�opt_compresszGeneralOptions.opt_compress,s��9?���0�0��1�5rqc�\�|r |d|d<dj|dd�|d<yd|d<d|d<y)NrrY� r!r0�)�join)rmrns  rp�	parseArgszGeneralOptions.parseArgs/s<�����7�D��L�!�h�h�t�A�B�x�0�D��O��D��L� �D��OrqN) r�r�r��synopsis�
optParameters�optFlagsr
r�r��_ciphersr��_macsr�Completions�CompleteList�decode�	Completer�CompleteUserAtHost�compDatar�r�str�__annotations__r�rr�r�r�r�r�r�r�)�.0r�s00rpr�r��s����H�	<�V�H�=�M�V�	
�	
��M�,	F�0�8�0�>�K�%�=�	�H��+�+�<�<�H��(�(�6�6�E� �u� � �+�,�(�e�(�(�h�)G��!�(�(�*�)G�H�&�E�&�&�E�'B�q����
�'B�C�+�E�O�O�2I�J�,�U�_�_�3J�K�	
�
%�E�$�$�&��E�O�O�)�,��E�O�O�*�T�:�
�
�H��I�t�C�y��79�M�4��c�5��c��?�2�3�4�9�8:�N�D��s�E�#�s�(�O�3�4�5�:�!�I�G�A�!��E*H��'Bs�E8�6E>r�c����tjrtd��tj��g}|f��fd�	}|t_tj|�tjj��S)Nzcan't ask 2 questions at once!c����|sy|dk(rtj�|dk(rDtjd�dj	|�}~dt_�j|�ydt
|�cxkrdkr-nn*|j|��rtj|�yyt
|�dk(r+|r(�rtjd�|j�yyy)	N��
z
r�� �r7z )	r�stopr��writer��callbackr�r��pop)�ch�resp�stresp�d�echos   ��rp�gotCharz!deferredAskFrame.<locals>.gotCharEs������
��<��L�L�N�
��:��K�K����W�W�T�]�F��!�E�N�
�J�J�v���
�3�r�7�
 �S�
 ��K�K��O�����B���
��W��\�d�����K�(��H�H�J�#�\rq)r�r��
ValueErrorr�Deferredr��canvas�focus_force)�questionrrrrs `  @rp�deferredAskFramer?sY����~�~��9�:�:�
����A�
�D���*�E�N�	�K�K���	�L�L�����Hrqc
�t�tjdd}d|vr'|jd�}|||dz|z}||dz|dz�=|ddD]2}	|j|�}|dddk(r||dzddk7rg|||dz�4t	j
�}|j
�t	j�}t|�a	tjtjtjd��t�a	tj|�tj+�D]G\}}|s�	t-t|�s�t/t|�j1tj2|��Itj4D]?\}\}	}
tj6j1tj2d
|�d|	�d|
����Agt_tj8D]?\}\}	}
tj6j1tj2d|�d|	�d|
����Agt_t;j<|d�
�a|jAdt:jBt>jDzdzt:jFt>jHzdzfz�t>jtj��tKjL|�|j
�tdr	tdsdtdvrtjO�n|jQ�tSjT�tj(tV�y#t$rY��wxYw#t j"$rB}t%d	|z�tj'�tj(d�Yd}~���d}~wwxYw)Nr!z-lr%r,z-or�-)�side�fill�expandz	ERROR: %sr{r|r})r�z%dx%dr*)rrYr[r�),rk�argv�indexrrN�Tk�withdraw�Toplevelr�menu�pack�TOP�BOTHr�r��parseOptionsr�
UsageError�print�opt_helprl�items�hasattr�getattrrxrwr�r`r�r�
VT100Framer��geometry�	fontWidthr3�
fontHeightr2r�installrh�mainloopr�run�
exitStatus)rnr��arg�root�top�u�kr�r��rh�rps           rpr'r'`s����8�8�A�B�<�D��t�|��J�J�t����A��A����%����Q���Q�����A�w���	��
�
�3��A��2�A�w�$��4��A��;�q�>�S�#8�"$��Q��Q����	��:�:�<�D��M�M�O�
�
�
�
�C��s��D��I�I�7�;�;�W�\�\�!�I�<���G�����T�"�
�
�
��4���1����q�!��D�!��#�#�G�K�K��3�4��,�,�>���8�B���
�
���W�[�[�B�q�c��2�$�a��t�*<�=�>��G���-�-�>���8�B���
�
���W�[�[�B�q�c��2�$�a��t�*<�=�>��G�����t�d�3�E��M�M�����u�{�{�*�Q�.��0B�0B�U�\�\�0Q�TU�0U�
V�	W��
�J�J�G�K�K�J� �
���d���M�M�O����G�F�O��w�v��0F����������K�K�M��H�H�Z���I�	��	������
�k�A�o��������������s*�/M�;M"�	M�M�"N7�57N2�2N7c��ddlm}datj|j��t
j��)Nr��failurer%)�twisted.pythonr2r(r�err�Failurerr�r1s rpr�r��s+��&��J��G�G�G�O�O����L�L�N�	rqc�"�eZdZdZd�Zd�Zd�Zy)r�Tc�,�tj�yr�)rr�r�s rp�stopFactoryzSSHClientFactory.stopFactory�s�����rqc��t�Sr�)r�)rm�addrs  rp�
buildProtocolzSSHClientFactory.buildProtocol�s��!�#�#rqc�d�tjdd|j�d|j���y)NrzConnection Failed, Reason:
 z: )r��showwarning�typer;)rm�	connector�reasons   rp�clientConnectionFailedz'SSHClientFactory.clientConnectionFailed�s+��� � ��+�F�K�K�=��6�<�<�.�I�	
rqN)r�r�r��noisyr8r;rAr�rqrpr�r��s���E��$�
rqr�c�0�eZdZd�Zd�Zd�Zd�Zd�Zd�Zy)r�c��d||fzay)NzDconch:	Remote side disconnected with error code %i
conch:	reason: %s)r()rm�code�descs   rp�receiveErrorzSSHClientTransport.receiveError�s��
V��T�l�
�	rqc�T�d||fzatjj|||�y)Nz>conch:	Sending disconnect with error code %i
conch:	reason: %s)r(r
r��sendDisconnect)rmrEr@s   rprIz!SSHClientTransport.sendDisconnect�s3��
P��V�n�
�	�	�$�$�3�3�D�$��Grqc�L�|s	tdrtjd|z�yy)NrzReceived Debug Message: %s)r�rr�)rm�
alwaysDisplay�message�langs    rp�receiveDebugzSSHClientTransport.receiveDebug�s"���G�E�N��G�G�0�7�:�;�+rqc���ttd|ddi�}|dk(rtjd�S|dk(r(tjtjd��Std|jj�jk(rtd}td}nvdjtd|jj�j�}djtd|jj�j�}tj|�d}d	j|d
dd�||�}|d
z
}t|d�j|j|||�S)NrYzknown-hostsr!r%�bad host keyz{} ({})z{},{}rzNThe authenticity of host '{}' can't be established.
{} key fingerprint is {}.�DSA�RSA�sssh-dsssssh-rsaz9
Are you sure you want to continue connecting (yes/no)? )rr�r�succeed�failr�
ConchErrorr
�getPeerrYr�r�getNSr�addCallback�_cbVerifyHostKey)rm�pubKey�fingerprint�goodKeyrY�khHost�keyType�quess        rp�
verifyHostKeyz SSHClientTransport.verifyHostKey�sC��
!����&�=�$�:O�P���a�<��=�=��#�#�
��\��:�:�e�.�.�~�>�?�?��v��$�.�.�"8�"8�":�"?�"?�?��v��� ���� �'�'�������9O�9O�9Q�9V�9V�W�� ���������9O�9O�9Q�9V�9V�W���l�l�6�*�1�-�G��#�V��"��6�w�?���
�
�Q�Q�D�#�D�!�,�8�8��%�%�v�v�w��
rqc	�t�|j�dvr(tdd�j|j|||�S|j�dk(r*tjd�t
jd��	tjd|�dd	d
d�|�d��ttjjd
�d�5}tj|�}|jd|�d|�d|���ddd�y#1swYyxYw#t$r%tj �tj�wxYw)N)�yes�nozPlease type  'yes' or 'no': r!rdzHost key verification failed.
rPzWarning: Permanently added 'z' (rQrRrSz) to the list of known hosts.
z~/.ssh/known_hostsr��
r�)�lowerrrYrZr�r�rrV�open�os�path�
expanduser�base64�	b64encode�
BaseExceptionrr�)rm�ansr[r^r_�known_hosts�
encodedKeys       rprZz#SSHClientTransport._cbVerifyHostKey�s���9�9�;�m�+�#�$B�A�F�R�R��%�%�v�v�w��
��9�9�;�$���K�K�;�<��"�"�>�2�2�	#��K�K���5�A�'�J�L�
�
�b�g�g�(�(�)=�>��D�
H��#�-�-�f�5�
��!�!�B�v�h�a��y��*��"F�G�
H�
H�
H���	#��J�J�L��"�"�"�	#�s+�9AD	�0C=�4D	�=D�D	�D	�	.D7c��tdr
td}ntj�}|jt	|t���y)Nr[)r��getpass�getuser�requestService�SSHUserAuthClient�
SSHConnection)rmr[s  rp�connectionSecurez#SSHClientTransport.connectionSecure�s6���6�?��6�?�D��?�?�$�D����-�d�M�O�D�ErqN)	r�r�r�rGrIrNrarZrwr�rqrpr�r��s"��
�H�<�
�:#�*Frqr�c�<�eZdZUgZeeed<dd�Zd�Zd�Z	d�Z
y)ru�	usedFilesNc�d�|s#dj|jtd�}t|d�S)Nz{}@{}'s password: rYr)r�r[r�r)rm�prompts  rp�getPasswordzSSHUserAuthClient.getPassword�s,���)�0�0����G�F�O�L�F����*�*rqc��tjD�cgc]}||jvs�|��}}|sy|d}tj|�|jj|�tjj|�}|dz
}tjj|�sy	tjj|�j�Scc}w#t$r|j�cYSwxYw)Nrz.pub)r�r�ryrr�r�rhrirj�existsr�Key�fromFile�blobrm�getPublicKey)rm�x�files�files    rpr�zSSHUserAuthClient.getPublicKeys���#�-�-�I�q��$�.�.�1H��I��I����Q�x������
������d�#��w�w�!�!�$�'�������w�w�~�~�d�#��	'��8�8�$�$�T�*�/�/�1�1��J���	'��$�$�&�&�	'�s�C�C�*,C�C8�7C8c���tjj|jd�}tjj	|�sy	tjtjj|�j�S#tj$rY}|jddk(r=d|jdz}t|d�j|jd�cYd}~SYd}~yd}~wwxYw)N���rzencrypted key with no password�Enter passphrase for key '%s': )rhrirjryr~rrTrrr��	keyObject�BadKeyErrorrnrrY�_cbGetPrivateKey)rmr�r�r{s    rp�
getPrivateKeyzSSHUserAuthClient.getPrivateKeys����w�w�!�!�$�.�.��"4�5���w�w�~�~�d�#��	Y��=�=����!2�!2�4�!8�!B�!B�C�C�����	Y��v�v�a�y�<�<�:�T�^�^�B�=O�O��'���2�>�>�t�?T�?T�VW�X�X�=��	Y�s�;B
�
C6�A	C1�&C6�1C6c�f�tjj|jd�}	tj
j
||��jS#tj$rD|dk(r�d|jdz}t|d�j|j|dz�cYSwxYw)Nr�)�passwordr%r�rr!)rhrirjryrrr�r�r�rrYr�)rmrn�countr�r{s     rpr�z"SSHUserAuthClient._cbGetPrivateKeys����w�w�!�!�$�.�.��"4�5��	��8�8�$�$�T�C�$�8�B�B�B�����	���z��6�����9K�K�F�#�F�A�.�:�:��%�%�u�q�y��
�		�s�*A�AB0�/B0r�)r�r�r�ryrr�r�r|r�r�r�r�rqrpruru�s%���I�t�C�y��+�
'� 	Y�
rqruc��eZdZd�Zy)rvc	��tds|jt��tjrQtjD]>\}}t	j
|t
j||tj���@tjrvtjD]b\}}tjdj||��t
jd|f�}|jd|�||j|<�dyy)Nr�z&asking for remote forwarding for {}:{}z0.0.0.0z
tcpip-forward)r��openChannel�
SSHSessionr�r�	listenTCPr
�SSHListenForwardingFactory� SSHListenClientForwardingChannelr�rr�r��packGlobal_tcpip_forward�sendGlobalRequest)rmr��hostportr��datas     rp�serviceStartedzSSHConnection.serviceStarted-s����y�!����Z�\�*�� � �'.�'<�'<�
�#�	�8��!�!���9�9��h�
�(S�(S���
��!�!�(/�(>�(>�
;�$�
�H����<�C�C�"�H���
"�:�:�I�z�;R�S���&�&���=�2:��#�#�J�/�
;�"rqN)r�r�r�r�r�rqrprvrv,s��;rqrvc�@�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)r�ssessionc�4�d|_tj�}tdr|j|_n|j|_|j|_|j
t_
tjj�tdr9|jj|dtj td���ntdr�tdrVt"j$j'dd�}d	}tj(||d
�}|jj|d|�|jj|dtj td��n|td
sVt"j$j'dd�}d	}tj(||d
�}|jj|d|�|jj|dd�|jj*j*j-d�y)Nr!rHr�s	subsystemr0r��TERM�xterm)��Prrr�spty-req�execr�sshellrq)�
escapeModer�SSHSessionClientr��handleInput�dataReceivedr��sendEOF�connectionLostr�r�rr	�conn�sendRequestr�NSrh�environr~�packRequest_pty_reqr
�
setTcpNoDelay)rm�foor��term�winSize�
ptyReqDatas      rp�channelOpenzSSHSession.channelOpenGs�������$�$�&���8��!�-�-�A�N�!�Z�Z�A�N��<�<��������
��� � �"��;���I�I�!�!�$��f�i�i��	�@R�6S�T�
�Y�
��u�~��z�z�~�~�f�g�6��(��$�8�8��w��K�
��	�	�%�%�d�J�
�C��I�I�!�!�$���	�	�'�)�:L�0M�N��7�#��z�z�~�~�f�g�6��(��$�8�8��w��K�
��	�	�%�%�d�J�
�C��I�I�!�!�$��#�6��	�	���%�%�3�3�A�6rqc�^�|dvrd|_|j|�y|jdk(r|tdk(rd|_y|jdk(r�d|_|dk(r*tjd�tj�y|dk(r7tjtj�tj�y|dk(r:tjd	�|jjj�y|jd
|z�yd|_|j|�y)N)rer�r!rHr%�.zdisconnecting from escape�r�zrekeying connectionr�r)r�r�r�rr�rr�rh�kill�getpid�signal�SIGSTOPr�r
�sendKexInit)rm�chars  rpr�zSSHSession.handleInpuths����<���D�O��J�J�t��
�_�_��
!�d�g�h�.?�&?��D�O�
�_�_��
!��D�O��s�{����3�4�������������	�	��V�^�^�4��������-�.��	�	�#�#�/�/�1���J�J�s�T�z�"��D�O��J�J�t�rqc��|jd�}tdrtt|��tj|�y)Nzutf-8r�)r�r�r�reprr�r��rmr�s  rpr�zSSHSession.dataReceived�s0���{�{�7�#���9���$�t�*��
���D�rqc���|tjk(r_tjdt	|�z�t
jj|�t
jj�yy)Nzgot %s stderr data)	r	�EXTENDED_DATA_STDERRrr�r�rkr�r��flush)rmr�r�s   rp�extReceivedzSSHSession.extReceived�sM���
�/�/�/��G�G�(�3�t�9�4�5��J�J���T�"��J�J����0rqc�j�tjd�tjj	�y)Nzgot eof)rr�rk�stdin�closer�s rp�eofReceivedzSSHSession.eofReceived�s�����	���	�	���rqc��tjd|z�t|jj�dk(rtj�yy)Nz	closed %sr!)rr�r�r��channelsrr�r�s rp�closedzSSHSession.closed�s8������d�"�#��t�y�y�!�!�"�a�'��L�L�N�(rqc��ttjd|�d�at	j
dtz�y)Nz>Lrzexit status: %s)r��struct�unpackr(rr�r�s  rp�request_exit_statuszSSHSession.request_exit_status�s.������t�T�2�1�5�6�
����!�J�.�/rqc�:�|jj|�yr�)r�r�r�s rpr�zSSHSession.sendEOF�s���	�	���$�rqN)r�r�r�rCr�r�r�r�r�r�r�r�r�rqrpr�r�Ds0���D�7�B�4����
0�
 rqr��__main__)<�__doc__rkrrrhr�r�rk�tkinterrN�tkinter.filedialog�
filedialogrt�tkinter.messagebox�
messageboxr��typingrr�
twisted.conchr�twisted.conch.client.defaultr�twisted.conch.sshrrr	r
rrr
r�twisted.conch.uir�twisted.internetrrrrr3rrrOr�Optionsr�r�rr(r�rr'r��
ClientFactoryr�r�rurv�
SSHChannelr�r�r�rqrp�<module>r�s��
�
��	�
�
�
��)�)���7�	�	�	�%�@�@�%�z�'�-�-�z�zR!�U�]�]�R!�l����
�
���
�B0�f
�

�x�-�-�

� LF��5�5�LF�^-��2�2�-�`;�J�,�,�;�0Y ��#�#�Y �x�z���E�rq