Ë
    ojÙ\  ã                   ó>  — d Z ddlZddlZddlZddlZddlZddlZddlZddl	m
Z ddlm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mZmZmZmZmZmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z% dd	l&m'Z'm(Z(  G d
„ dejR                  «      Z* G d„ de(jV                  «      Z,da-da.da/da0d„ Z1d„ Z2d„ Z3 G d„ de#jh                  «      Z5 G d„ dejl                  «      Z6 G d„ dejn                  «      Z7 G d„ dejp                  «      Z8 G d„ dejr                  «      Z:e;dk(  r e2«        yy)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                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTkConchMenuc                 ó*  — t        j                  j                  | g|¢­i |¤Ž | j                  j	                  d«       t        j
                  «       | _        | j                  j                  d«       t        j                  | ddd¬«      j                  ddd¬«       t        j                  | «      | _        | j                  j                  d	d	dd
¬«       t        j                  | ddd¬«      j                  dd	d¬«       t        j                  | «      | _        | j                  j                  d	d	d	d
¬«       t        j                  | ddd¬«      j                  ddd¬«       t        j                  | «      | _        | j                  j                  d	d	dd
¬«       t        j                  | ddd¬«      j                  ddd¬«       t        j                  | «      | _        | j                  j                  d	d	dd
¬«       t        j                  | ddd¬«      j                  ddd¬«       t        j                  | «      | _        | j                  j                  d	dd
¬«       t        j                   | | j"                  d¬«      j                  ddd
¬«       t        j                  | d¬«      j                  ddd¬«       t        j$                  | dd¬«      | _        | j&                  j                  d	d	dd
¬«       t        j                   | d| j(                  ¬«      j                  dd¬«       t        j                   | d| j*                  ¬«      j                  dd¬«       t        j                  | «      | _        | j,                  j                  d	dd
¬«       t        j                  | d¬«      j                  ddd
¬«       t        j                  | «      | _        | j.                  j                  d	dd
¬«       t        j                  | d ¬«      j                  ddd
¬«       t        j0                  | d!| j                  d¬"«      | _        | j2                  j                  d	d#¬«       t        j0                  | d$| j                  d%¬"«      | _        | j4                  j                  dd#¬«       t        j                  | d&¬«      j                  ddd'd
¬«       t        j                  | ddd(¬«      j                  dd)d¬«       t        j                  | d*¬+«      | _        | j6                  j                  d	d	d)d
¬«       t        j                  | ddd,¬«      j                  dd-d¬«       t        j                  | d.¬+«      | _        | j8                  j                  d	d	d-d
¬«       t        j                  | ddd/¬«      j                  dd0d¬«       t        j                  | d1¬+«      | _        | j:                  j                  d	d	d0d
¬«       t        j                   | d2| j<                  ¬«      j                  ddd3d
¬«       | j?                  ddd4¬5«       | jA                  d	dd	¬5«       | j                  jC                  d6tD        jF                  «       y )7NÚTkConchÚlocalÚwÚleftÚHostname)ÚanchorÚjustifyÚtexté   )ÚcolumnÚrowÚstickyé   Únesw)r"   Ú
columnspanr#   r$   ÚPortÚUsernameé   ÚCommandé   ÚIdentityé   ÚBrowse)Úcommandr    zPort Forwarding)r    é   r   )ÚheightÚwidthÚAdd)r    r0   é   )r"   r#   ÚRemoveé   ÚHostÚLocal)r    ÚvariableÚvalueé	   ÚRemoteÚremotezAdvanced Optionsé
   ÚCipheré   Úcipher)ÚnameÚMACé   ÚmaczEscape Charé   ÚescapezConnect!é   é@   )Ú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ÚremoteForwardrB   rF   rH   Ú	doConnectÚgrid_rowconfigureÚgrid_columnconfigurer   ÚsysÚexit)ÚselfÚargsÚparamss      ú?/usr/lib/python3/dist-packages/twisted/conch/scripts/tkconch.pyrP   zTkConchMenu.__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                 óÚ   — t        j                  «       }|rU| j                  j                  dt        j
                  «       | j                  j                  t        j
                  |«       y y ©Nr   )ÚtkFileDialogÚaskopenfilenamer\   ÚdeleterN   ÚENDÚinsert)rm   Úrs     rp   r^   zTkConchMenu.getIdentityFile…   sH   € Ü×(Ñ(Ó*ˆÙØ�M‰M× Ñ  ¤G§K¡KÔ0Ø�M‰M× Ñ ¤§¡¨aÕ0ð rq   c                 ó  — | j                   j                  «       }| j                   j                  dt        j                  «       | j
                  j                  «       }| j
                  j                  dt        j                  «       | j                  j                  «       dk(  r1| j                  j                  t        j                  d|› d|› �«       y | j                  j                  t        j                  d|› d|› �«       y )Nr   r   úL:ú:úR:)	rc   Úgetrv   rN   rw   rd   rT   r`   rx   )rm   rZ   rY   s      rp   ra   zTkConchMenu.addForward‹   s¿   € Ø×Ñ×#Ñ#Ó%ˆØ×Ñ×Ñ ¤7§;¡;Ô/Ø×Ñ×#Ñ#Ó%ˆØ×Ñ×Ñ ¤7§;¡;Ô/Ø×Ñ×"Ñ"Ó$¨Ò/Ø�M‰M× Ñ ¤§¡°°4°&¸¸$¸Ð.@ÕAà�M‰M× Ñ ¤§¡°°4°&¸¸$¸Ð.@ÕArq   c                 óz   — | j                   j                  «       }|r| j                   j                  |d   «       y y rs   )r`   ÚcurselectionÚremove)rm   Úcurs     rp   rb   zTkConchMenu.removeForward•   s2   € Ø�m‰m×(Ñ(Ó*ˆÙØ�M‰M× Ñ   Q¡Õ(ð rq   c                 óÄ  — d}| j                   j                  «       t        d<   | j                  j                  «       t        d<   | j                  j                  «       t        d<   | j
                  j                  «       t        d<   | j                  j                  «       }| j                  j                  «       }| j                  j                  «       }|r7|t        j                  v r|gt        _
        nt        j                  dd«       d}|r9|t        j                  v r|gt        _        n|rt        j                  dd	«       d}|r||d
k(  r
d t        d<   nm|d   dk(  r0t        |«      dk(  r"t        t!        |d   «      dz
  «      t        d<   n5t        |«      dk(  r
|t        d<   n|rt        j                  dd|z  «       d}| j"                  j                  «       r7t        j$                  j'                  | j"                  j                  «       «       | j(                  j                  dt*        j,                  «      D ];  }|d   dk(  rt        j/                  |dd  «       Œ$t        j1                  |dd  «       Œ= dt        d   v r*t        d   j3                  dd«      \  t        d<   t        d<   t        d   r	t        d   s|rt        j                  dd«       d}|�rm| j4                  j7                  «        | j4                  j9                  «        t        d   r?t:        j<                  }t?        j@                  t:        jB                  «       |t:        _        nt?        jD                  «        tF        t>        _$        t        j$                  sddgt        _        t        d   }tK        t        d   xs d«      }t?        jL                  ||f«       tO        jP                  ||tS        «       «       tT        j4                  jW                  «        tT        j4                  jY                  dj[                  t        d   t        d   «      «       y | j]                  «        y )Nr!   rY   rZ   r[   r0   r   zBad cipher.r   zBad MAC.ÚnonerH   ú^r%   rJ   zBad escape character '%s'.ÚLú@zMissing host or username.r   z~/.ssh/id_rsaz~/.ssh/id_dsaé   z{}@{} - TkConch)/rY   r~   ÚoptionsrZ   r[   r0   rB   rF   rH   ÚSSHClientTransportÚsupportedCiphersÚtkMessageBoxÚ	showerrorÚsupportedMACsÚlenÚchrÚordr\   Ú	identitysÚappendr`   rN   rw   Úopt_localforwardÚopt_remoteforwardÚsplitrQ   ÚquitÚdestroyrk   Ústdoutr   ÚstartLoggingÚstderrÚdiscardLogsÚhandleErrorÚdeferrÚintÚmsgr   Ú
connectTCPÚSSHClientFactoryÚframeÚ	deiconifyrR   ÚformatÚfocus)	rm   ÚfinishedrB   rF   rH   ÚlineÚrealoutrY   rZ   s	            rp   rh   zTkConchMenu.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�Lrq   N)Ú__name__Ú
__module__Ú__qualname__rP   r^   ra   rb   rh   © rq   rp   r   r   &   s   „ ò\;ò|1òBò)ó
Frq   r   c                   ó  — e Zd ZU dZg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢gZg d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gZej                  j                  Z	ej                  j                  Z ej                  dg ej                  e	D � �cg c]  }|j                  «       ‘Œ c}} «       ej                  eD � �cg c]  }|j                  «       ‘Œ c}} «       ej                   d¬«       ej                   d¬«      dœ ej"                  «        ej                   d¬«       ej                   dd¬«      g¬«      Zg Zee   ed<   g Zeeeeeef   f      ed<   g Zeeeeeef   f      ed<   d„ Zd„ Zd „ Zd!„ Zd"„ Zy#c c}} w c c}} w )$ÚGeneralOptionsz,Usage:    tkconch [options] host [command]
 )r[   ÚlNzLog in using this user name.)r\   Úiz~/.ssh/identityz&Identity for public key authentication)rH   Úeú~z(Set escape character; ``none'' = disable)rB   ÚcNzSelect 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ÚTzDo not allocate a tty.)ÚversionÚVzDisplay version number only.)ÚcompressÚCzEnable 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½   zlisten-port:host:port)Údescr)rB   rµ   r¸   r¹   r0   ÚargumentT)rÊ   Úrepeat)ÚmutuallyExclusiveÚ
optActionsÚextraActionsr’   ÚlocalForwardsÚremoteForwardsc                 ó:   — | j                   j                  |«       y ©N)r’   r“   )rm   r±   s     rp   Úopt_identityzGeneralOptions.opt_identity  s   € Ø�‰×Ñ˜aÕ rq   c                 ó˜   — |j                  d«      \  }}}t        |«      }t        |«      }| j                  j                  |||ff«       y ©Nr|   )r–   rŸ   rÐ   r“   )rm   ÚfÚ	localPortÚ
remoteHostÚ
remotePorts        rp   r”   zGeneralOptions.opt_localforward   sF   € Ø,-¯G©G°C«LÑ)ˆ	�:˜zÜ˜	“Nˆ	Ü˜“_ˆ
Ø×Ñ×!Ñ! 9¨z¸:Ð.FÐ"GÕHrq   c                 ó˜   — |j                  d«      \  }}}t        |«      }t        |«      }| j                  j                  |||ff«       y rÖ   )r–   rŸ   rÑ   r“   )rm   r×   rÚ   ÚconnHostÚconnPorts        rp   r•   z GeneralOptions.opt_remoteforward&  sF   € Ø)*¯©°«Ñ&ˆ
�H˜hÜ˜“_ˆ
Ü�x“=ˆØ×Ñ×"Ñ" J°¸8Ð0DÐ#EÕFrq   c                 ó,   — dgt         j                  dd y )NÚzlibr   r!   )rŠ   ÚsupportedCompressions©rm   s    rp   Úopt_compresszGeneralOptions.opt_compress,  s   € Ø9?¸Ô×0Ñ0°°1Ñ5rq   c                 ó\   — |r |d   | d<   dj                  |dd  «      | d<   y d| d<   d| d<   y )Nr   rY   ú r!   r0   Ú )Újoin)rm   rn   s     rp   Ú	parseArgszGeneralOptions.parseArgs/  s<   € ÙØ ™7ˆD�‰LØ!Ÿh™h t¨A¨B xÓ0ˆD�ŠOàˆD�‰LØ ˆD�ŠOrq   N) rª   r«   r¬   ÚsynopsisÚoptParametersÚoptFlagsr   rŠ   r‹   Ú_ciphersrŽ   Ú_macsr   ÚCompletionsÚCompleteListÚdecodeÚ	CompleterÚCompleteUserAtHostÚcompDatar’   r   ÚstrÚ__annotations__rÐ   r   rŸ   rÑ   rÔ   r”   r•   râ   rç   )Ú.0rÇ   s   00rp   r¯   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Â6E>r¯   c                 óø   ‡‡— t         j                  rt        d«      ‚t        j                  «       Šg }|fˆˆfd„	}|t         _        t         j                  | «       t         j                  j                  «        ‰S )Nzcan't ask 2 questions at once!c                 óÄ  •— | sy | dk(  rt        j                  «        | dk(  rDt        j                  d«       dj	                  |«      }~d t        _        ‰j                  |«       y dt        | «      cxk  rdk  r-n n*|j                  | «       ‰rt        j                  | «       y y t        | «      dk(  r+|r(‰rt        j                  d«       |j                  «        y y y )	Núúz
rå   é    é   r7   z )	r   Ústopr£   Úwriteræ   Úcallbackr‘   r“   Úpop)ÚchÚrespÚstrespÚdÚechos      €€rp   ÚgotCharz!deferredAskFrame.<locals>.gotCharE  s­   ø€ ÙØØ�Š<Ü�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)Úquestionr  r  r  r  s    `  @rp   ÚdeferredAskFramer  ?  sY   ù€ Ü‡~‚~ÜÐ9Ó:Ð:Ü�‰Ó€AØ€Dàö ð* „E„NÜ	‡K�K�ÔÜ	‡L�L×ÑÔØ€Hrq   c            
      ót  — t         j                  dd  } d| v r'| j                  d«      }| ||dz    | z   } | |dz   |dz   …= | d d  D ]2  }	 | j                  |«      }|d d dk(  r| |dz      d   dk7  rg | ||dz    Œ4 t	        j
                  «       }|j                  «        t	        j                  «       }t        |«      a	t        j                  t        j                  t        j                  d¬«       t        «       a	 t        j                  | «       t        j+                  «       D ]G  \  }}|sŒ	t-        t        |«      sŒt/        t        |«      j1                  t        j2                  |«       ŒI t        j4                  D ]?  \  }\  }	}
t        j6                  j1                  t        j2                  d
|› d|	› d|
› �«       ŒA g t        _        t        j8                  D ]?  \  }\  }	}
t        j6                  j1                  t        j2                  d|› d|	› d|
› �«       ŒA g t        _        t;        j<                  |d ¬«      a|jA                  dt:        jB                  t>        jD                  z  dz   t:        jF                  t>        jH                  z  dz   fz  «       t>        j                  t        j                  ¬«       tK        jL                  |«       |j                  «        t        d   r	t        d   sdt        d   v rt        jO                  «        n|jQ                  «        tS        jT                  «        t        j(                  tV        «       y # t        $ r Y �Œw xY w# t         j"                  $ rB}t%        d	|z  «       t        j'                  «        t        j(                  d«       Y d }~�Œ¢d }~ww xY w)Nr!   z-lr%   r,   z-or   ú-)ÚsideÚfillÚexpandz	ERROR: %sr{   r|   r}   )rþ   z%dx%dr*   )r  rY   r[   r‡   ),rk   ÚargvÚindexr  rN   ÚTkÚwithdrawÚToplevelr   ÚmenuÚpackÚTOPÚBOTHr¯   r‰   ÚparseOptionsr   Ú
UsageErrorÚprintÚopt_helprl   ÚitemsÚhasattrÚgetattrrx   rw   rÐ   r`   rÑ   r   Ú
VT100Framer£   ÚgeometryÚ	fontWidthr3   Ú
fontHeightr2   r   Úinstallrh   Úmainloopr   ÚrunÚ
exitStatus)rn   r±   ÚargÚrootÚtopÚuÚkrÇ   r·   ÚrhÚrps              rp   r'  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Î2N7c                  ó‚   — ddl m}  dat        j                  | j                  «       «       t        j                  «        ‚ )Nr   ©Úfailurer%   )Útwisted.pythonr2  r(  r   ÚerrÚFailurer   rü   r1  s    rp   r�   r�   “  s+   € Ý&ð €JÜ‡G�GˆG�O‰OÓÔÜ‡L�L„NØ	rq   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r¢   Tc                 ó,   — t        j                  «        y rÓ   )r   rü   rá   s    rp   ÚstopFactoryzSSHClientFactory.stopFactory   s   € Ü�‰�rq   c                 ó   — t        «       S rÓ   )rŠ   )rm   Úaddrs     rp   ÚbuildProtocolzSSHClientFactory.buildProtocol£  s   € Ü!Ó#Ð#rq   c                 ód   — t        j                  dd|j                  › d|j                  › �«       y )Nr   zConnection Failed, Reason:
 z: )rŒ   ÚshowwarningÚtyper;   )rm   Ú	connectorÚreasons      rp   ÚclientConnectionFailedz'SSHClientFactory.clientConnectionFailed¦  s+   € Ü× Ñ ØØ+¨F¯K©K¨=¸¸6¿<¹<¸.ÐIõ	
rq   N)rª   r«   r¬   Únoisyr8  r;  rA  r­   rq   rp   r¢   r¢   �  s   „ Ø€Eòò$ó
rq   r¢   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)rŠ   c                 ó   — d||fz  a y )NzDconch:	Remote side disconnected with error code %i
conch:	reason: %s)r(  )rm   ÚcodeÚdescs      rp   ÚreceiveErrorzSSHClientTransport.receiveError®  s   € ð VØ�Tˆlññ 	rq   c                 óT   — d||fz  a t        j                  j                  | ||«       y )Nz>conch:	Sending disconnect with error code %i
conch:	reason: %s)r(  r   rŠ   ÚsendDisconnect)rm   rE  r@  s      rp   rI  z!SSHClientTransport.sendDisconnectµ  s3   € ð PØ�Vˆnñð 	ô 	×$Ñ$×3Ñ3°D¸$ÀÕGrq   c                 óL   — |s	t         d   rt        j                  d|z  «       y y )Nr   zReceived Debug Message: %s)r‰   r   r    )rm   ÚalwaysDisplayÚmessageÚlangs       rp   ÚreceiveDebugzSSHClientTransport.receiveDebug½  s"   € áœG EšNÜ�G‰GÐ0°7Ñ:Õ;ð +rq   c                 óæ  — t        t        d   |dd i«      }|dk(  rt        j                  d«      S |dk(  r(t        j                  t        j                  d«      «      S t        d   | j                  j                  «       j                  k(  rt        d   }t        d   }nvdj                  t        d   | j                  j                  «       j                  «      }dj                  t        d   | j                  j                  «       j                  «      }t        j                  |«      d   }d	j                  |d
ddœ|   |«      }|dz  }t        |d«      j                  | j                  |||«      S )NrY   zknown-hostsr!   r%   úbad host keyz{} ({})z{},{}r   zNThe authenticity of host '{}' can't be established.
{} key fingerprint is {}.ÚDSAÚRSA©s   ssh-dsss   ssh-rsaz9
Are you sure you want to continue connecting (yes/no)? )r   r‰   r   ÚsucceedÚfailr   Ú
ConchErrorr   ÚgetPeerrY   r¥   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óð rq   c           	      ót  — |j                  «       dvr(t        dd«      j                  | j                  |||«      S |j                  «       dk(  r*t        j                  d«       t        j                  d«      ‚	 t        j                  d|›dd	d
dœ|   ›d�«       t        t        j                  j                  d«      d«      5 }t        j                  |«      }|j                  d|› d|› d|› �«       d d d «       y # 1 sw Y   y xY w# t        $ r% t        j                   «        t        j                  ‚w xY w)N)ÚyesÚnozPlease type  'yes' or 'no': r!   rd  zHost key verification failed.
rP  zWarning: Permanently added 'z' (rQ  rR  rS  z) to the list of known hosts.
z~/.ssh/known_hostsrÉ   ú
rä   )Úlowerr  rY  rZ  r£   rý   r   rV  ÚopenÚosÚpathÚ
expanduserÚbase64Ú	b64encodeÚBaseExceptionr   rž   )rm   Úansr[  r^  r_  Úknown_hostsÚ
encodedKeys          rp   rZ  z#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+   Á9AD	 Ã0C=Ã4D	 Ã=DÄD	 ÄD	 Ä	.D7c                 ó˜   — t         d   r
t         d   }nt        j                  «       }| j                  t	        |t        «       «      «       y )Nr[   )r‰   ÚgetpassÚgetuserÚrequestServiceÚSSHUserAuthClientÚSSHConnection)rm   r[   s     rp   ÚconnectionSecurez#SSHClientTransport.connectionSecureô  s6   € Ü�6Š?Ü˜6‘?‰Dä—?‘?Ó$ˆDØ×ÑÔ-¨d´M³OÓDÕErq   N)	rª   r«   r¬   rG  rI  rN  ra  rZ  rw  r­   rq   rp   rŠ   rŠ   ­  s"   „ ò
òHò<ò
ò:#ó*Frq   rŠ   c                   ó<   — e Zd ZU g Zee   ed<   dd„Zd„ Zd„ Z	d„ Z
y)ru  Ú	usedFilesNc                 ód   — |s#dj                  | j                  t        d   «      }t        |d«      S )Nz{}@{}'s password: rY   r   )r¥   r[   r‰   r  )rm   Úprompts     rp   ÚgetPasswordzSSHUserAuthClient.getPasswordÿ  s,   € ÙØ)×0Ñ0°·±¼GÀF¹OÓLˆFÜ ¨Ó*Ð*rq   c                 óö  — t         j                  D �cg c]  }|| j                  vsŒ|‘Œ }}|sy |d   }t        j                  |«       | j                  j                  |«       t        j                  j                  |«      }|dz  }t        j                  j                  |«      sy 	 t        j                  j                  |«      j                  «       S c c}w # t        $ r | j                  «       cY S w xY w)Nr   z.pub)r‰   r’   ry  r   r    r“   rh  ri  rj  Úexistsr   ÚKeyÚfromFileÚblobrm  ÚgetPublicKey)rm   ÚxÚfilesÚfiles       rp   r‚  zSSHUserAuthClient.getPublicKey  sË   € Ü#×-Ñ-ÖI�q°¸$¿.¹.Ò1H’ÐIˆÐIÙØØ�Q‰xˆÜ�‰�ŒØ�‰×Ñ˜dÔ#Ü�w‰w×!Ñ! $Ó'ˆØ�‰ˆÜ�w‰w�~‰~˜dÔ#Øð	'Ü—8‘8×$Ñ$ TÓ*×/Ñ/Ó1Ð1ùò Jøô ò 	'Ø×$Ñ$Ó&Ò&ð	'ús   “C§CÂ*,C ÃC8Ã7C8c                 óò  — t         j                  j                  | j                  d   «      }t         j                  j	                  |«      sy 	 t        j                  t        j                  j                  |«      j                  «      S # t        j                  $ rY}|j                  d   dk(  r=d| j                  d   z  }t        |d«      j                  | j                  d«      cY d }~S Y d }~y d }~ww xY w)Néÿÿÿÿr   zencrypted key with no passwordúEnter passphrase for key '%s': )rh  ri  rj  ry  r~  r   rT  r   r  r€  Ú	keyObjectÚBadKeyErrorrn   r  rY  Ú_cbGetPrivateKey)rm   r…  r²   r{  s       rp   ÚgetPrivateKeyzSSHUserAuthClient.getPrivateKey  s¾   € Ü�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Ã1C6c                 óf  — t         j                  j                  | j                  d   «      }	 t        j
                  j                  ||¬«      j                  S # t        j                  $ rD |dk(  r‚ d| j                  d   z  }t        |d«      j                  | j                  |dz   «      cY S w xY w)Nr‡  )Úpasswordr%   rˆ  r   r!   )rh  ri  rj  ry  r   r  r€  r‰  rŠ  r  rY  r‹  )rm   rn  Úcountr…  r{  s        rp   r‹  z"SSHUserAuthClient._cbGetPrivateKey  sŸ   € Ü�w‰w×!Ñ! $§.¡.°Ñ"4Ó5ˆð	Ü—8‘8×$Ñ$ T°CÐ$Ó8×BÑBÐBøÜ×Ñò 	Ø˜ŠzØØ6¸¿¹ÈÑ9KÑKˆFÜ# F¨AÓ.×:Ñ:Ø×%Ñ% u¨q¡yóò ð		ús   ®*A ÁAB0Â/B0rÓ   )rª   r«   r¬   ry  r   ró   rô   r|  r‚  rŒ  r‹  r­   rq   rp   ru  ru  ü  s%   … Ø€Iˆt�C‰yÓó+ò
'ò 	Yó
rq   ru  c                   ó   — e Zd Zd„ Zy)rv  c           	      ó  — t         d   s| j                  t        «       «       t         j                  rQt         j                  D ]>  \  }}t	        j
                  |t        j                  | |t        j                  «      «       Œ@ t         j                  rvt         j                  D ]b  \  }}t        j                  dj                  ||«      «       t        j                  d|f«      }| j                  d|«       || j                  |<   Œd y y )NrÃ   z&asking for remote forwarding for {}:{}z0.0.0.0ztcpip-forward)r‰   ÚopenChannelÚ
SSHSessionrÐ   r   Ú	listenTCPr
   ÚSSHListenForwardingFactoryÚ SSHListenClientForwardingChannelrÑ   r   r    r¥   ÚpackGlobal_tcpip_forwardÚsendGlobalRequest)rm   rØ   ÚhostportrÚ   Údatas        rp   ÚserviceStartedzSSHConnection.serviceStarted-  sé   € Ü�yÒ!Ø×ÑœZ›\Ô*Ü× Ò Ü'.×'<Ñ'<ò Ñ#�	˜8Ü×!Ñ!ØÜ×9Ñ9Ø˜h¬
×(SÑ(Sóõðô ×!Ò!Ü(/×(>Ñ(>ò ;Ñ$�
˜HÜ—‘Ø<×CÑCØ" Hóôô
 "×:Ñ:¸IÀzÐ;RÓS�Ø×&Ñ& ¸Ô=Ø2:�×#Ñ# JÒ/ñ;ð "rq   N)rª   r«   r¬   r›  r­   rq   rp   rv  rv  ,  s   „ ó;rq   rv  c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)r“  s   sessionc                 ó4  — d| _         t        j                  «       }t        d   r| j                  |_        n| j                  |_        | j                  |_        |j
                  t        _
        t        j                  j                  «        t        d   r9| j                  j                  | dt        j                   t        d   «      «       �nt        d   r—t        d   rVt"        j$                  j'                  dd«      }d	}t        j(                  ||d
«      }| j                  j                  | d|«       | j                  j                  | dt        j                   t        d   «      «       n|t        d   sVt"        j$                  j'                  dd«      }d	}t        j(                  ||d
«      }| j                  j                  | d|«       | j                  j                  | dd«       | j                  j*                  j*                  j-                  d«       y )Nr!   rH   rÅ   s	   subsystemr0   r»   ÚTERMÚxterm)é   éP   r   r   rå   s   pty-reqÚexecr½   s   shellrq   )Ú
escapeModer   ÚSSHSessionClientr‰   ÚhandleInputÚdataReceivedrý   ÚsendEOFÚconnectionLostr£   rþ   r  r	  ÚconnÚsendRequestr   ÚNSrh  Úenvironr~   ÚpackRequest_pty_reqr   ÚsetTcpNoDelay)rm   Úfoor´   ÚtermÚwinSizeÚ
ptyReqDatas         rp   ÚchannelOpenzSSHSession.channelOpenG  s�  € ð ˆŒÜ×$Ñ$Ó&ˆÜ�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Õ6rq   c                 ó^  — |dv rd| _         | j                  |«       y | j                   dk(  r|t        d   k(  rd| _         y | j                   dk(  rÆd| _         |dk(  r*t        j                  d«       t        j                  «        y |dk(  r7t        j                  t        j                  «       t        j                  «       y |dk(  r:t        j                  d	«       | j                  j                  j                  «        y | j                  d
|z   «       y d| _         | j                  |«       y )N)re  rù   r!   rH   r%   ú.zdisconnecting from escapeúrº   zrekeying connectionr³   r   )r£  rý   r‰   r   r    r   rü   rh  ÚkillÚgetpidÚsignalÚSIGSTOPr©  r   ÚsendKexInit)rm   Úchars     rp   r¥  zSSHSession.handleInputh  sá   € à�<ÑØˆ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Õrq   c                 óŠ   — |j                  d«      }t        d   rt        t        |«      «       t        j                  |«       y )Nzutf-8rÈ   )rï   r‰   r  Úreprr£   rý   ©rm   rš  s     rp   r¦  zSSHSession.dataReceived‚  s0   € Ø�{‰{˜7Ó#ˆÜ�9ÒÜ”$�t“*ÔÜ�‰�DÕrq   c                 óè   — |t         j                  k(  r_t        j                  dt	        |«      z  «       t
        j                  j                  |«       t
        j                  j                  «        y y )Nzgot %s stderr data)	r	   ÚEXTENDED_DATA_STDERRr   r    r�   rk   r›   rý   Úflush)rm   r¼   rš  s      rp   ÚextReceivedzSSHSession.extReceivedˆ  sM   € Ø”
×/Ñ/Ò/Ü�G‰GÐ(¬3¨t«9Ñ4Ô5Ü�J‰J×Ñ˜TÔ"Ü�J‰J×ÑÕð 0rq   c                 ój   — t        j                  d«       t        j                  j	                  «        y )Nzgot eof)r   r    rk   ÚstdinÚcloserá   s    rp   ÚeofReceivedzSSHSession.eofReceivedŽ  s   € Ü�‰�	ÔÜ�	‰	�‰Õrq   c                 ó¢   — t        j                  d| z  «       t        | j                  j                  «      dk(  rt        j                  «        y y )Nz	closed %sr!   )r   r    r�   r©  Úchannelsr   rü   rá   s    rp   ÚclosedzSSHSession.closed’  s8   € Ü�‰�˜dÑ"Ô#Üˆt�y‰y×!Ñ!Ó" aÒ'Ü�L‰L�Nð (rq   c                 ó€   — t        t        j                  d|«      d   «      at	        j
                  dt        z  «       y )Nz>Lr   zexit status: %s)rŸ   ÚstructÚunpackr(  r   r    r¿  s     rp   Úrequest_exit_statuszSSHSession.request_exit_status—  s.   € äœŸ™ t¨TÓ2°1Ñ5Ó6ˆ
Ü�‰Ð!¤JÑ.Õ/rq   c                 ó:   — | j                   j                  | «       y rÓ   )r©  r§  rá   s    rp   r§  zSSHSession.sendEOFœ  s   € Ø�	‰	×Ñ˜$Õrq   N)rª   r«   r¬   rC   r³  r¥  r¦  rÃ  rÇ  rÊ  rÎ  r§  r­   rq   rp   r“  r“  D  s0   „ Ø€Dò7òBò4òòòò
0ó
 rq   r“  Ú__main__)<Ú__doc__rk  rr  rh  r¹  rÌ  rk   ÚtkinterrN   Útkinter.filedialogÚ
filedialogrt   Útkinter.messageboxÚ
messageboxrŒ   Útypingr   r   Útwisted.conchr   Útwisted.conch.client.defaultr   Útwisted.conch.sshr   r   r	   r
   r   r   r   r   Útwisted.conch.uir   Útwisted.internetr   r   r   r   r3  r   r   rO   r   ÚOptionsr¯   r‰   r  r(  r£   r  r'  r�   ÚClientFactoryr¢   rŠ   ru  rv  Ú
SSHChannelr“  rª   r­   rq   rp   ú<module>rà     s  ðñ
ó
 Û Û 	Û Û Û 
Û Ý )Ý )ß å Ý 7÷	÷ 	ó 	õ %ß @Ó @ß %ôz�'—-‘-ô zôzR!�U—]‘]ô R!ðl €Ø€Ø€
Ø€òòB0òf
ô
�x×-Ñ-ô 
ô LF˜×5Ñ5ô LFô^-˜×2Ñ2ô -ô`;�J×,Ñ,ô ;ô0Y �×#Ñ#ô Y ðx ˆzÒÙ…Eð rq   