Ϫf\>dZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m ZddlmZmZddlmZddlmZddlmZmZmZmZmZmZmZmZddlm Z ddl!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'm(Z(Gd d ejRZ*Gd d e(jVZ,da-da.da/da0dZ1dZ2dZ3Gdde#jhZ5GddejlZ6GddejnZ7GddejpZ8GddejrZ:e;dk(re2yy)z2 Implementation module for the `tkconch` command. N)ListTuple)error)isInKnownHosts)channelcommon connection forwardingkeyssession transportuserauth)tkvt100)deferprotocolreactor tksupport)logusagec*eZdZdZdZdZdZdZy) TkConchMenuc* tjj|g|i||jj dtj |_|j jdtj|dddjdddtj||_ |jjd d dd tj|ddd jdd dtj||_ |jjd d d d tj|ddd jdddtj||_ |jjd d dd tj|dddjdddtj||_|jjd d dd tj|dddjdddtj||_|jjd dd tj ||j"djddd tj|djdddtj$|dd|_|j&jd d dd tj |d|j(jddtj |d|j*jddtj||_|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)dtj|d*+|_|j6jd d d)d tj|ddd,jdd-dtj|d.+|_|j8jd d d-d tj|ddd/jdd0dtj|d1+|_|j:jd d d0d tj |d2|j<jddd3d |j?ddd45|jAd dd 5|jjCd6tDjFy)7NTkConchlocalwleftHostname)anchorjustifytext)columnrowstickynesw)r" columnspanr#r$PortUsernameCommandIdentityBrowse)commandr zPort Forwarding)r r)heightwidthAdd)r r0)r"r#RemoveHostLocal)r variablevalue RemoteremotezAdvanced Options Cipher cipher)nameMAC macz Escape Char escapezConnect!@)weightminsizeWM_DELETE_WINDOW)$TkinterFrame__init__mastertitle StringVarlocalRemoteVarsetLabelgridEntryhostportuserr0identityButtongetIdentityFileListboxforwards addForward removeForward forwardPort forwardHost Radiobutton localForward remoteForwardrBrFrH doConnectgrid_rowconfiguregrid_columnconfigurersysexit)selfargsparamss ?/usr/lib/python3/dist-packages/twisted/conch/scripts/tkconch.pyrPzTkConchMenu.__init__'s t5d5f5 )$%//1 ( d3ZHMM!C N MM$'  aA1VD d3VDII!C J MM$'  aA1VD d3ZHMM!C N MM$'  aA1VD d3YGLL!C M }}T*  qaG d3ZHMM!C N  d+  !6:tT%9%9INN!F O   d!2388qQT8UQa@  !qHt%AFFaUVFWt(D4F4FGLL! M #==. QAf= d(--QAf-M"==. QAf= d(--QAf-M#// w)<)_$tj$s ddgt_td}tKtdxsd}t?jL||ftOjP||tStTj4jWtTj4jYdj[tdtdy|j]y)Nr!rYrZr[r0rz Bad cipher.rzBad MAC.nonerH^r%rJzBad escape character '%s'.L@zMissing host or username.rz ~/.ssh/id_rsaz ~/.ssh/id_dsaz{}@{} - TkConch)/rYr~optionsrZr[r0rBrFrHSSHClientTransportsupportedCiphers tkMessageBox showerror supportedMACslenchrordr\ identitysappendr`rNrwopt_localforwardopt_remoteforwardsplitrQquitdestroyrkstdoutr startLoggingstderr discardLogs handleErrordeferrintmsgr connectTCPSSHClientFactoryframe deiconifyrRformatfocus) rmfinishedrBrFrHlinerealoutrYrZs rprhzTkConchMenu.doConnectsB))--/))--/))--/!\\--/ "hhlln" +<<<7=h"3&&y-@ (666475"0&&y*= $(!c!c&kQ&6$'F1I(;$<!V!$*!&&y2NQW2WX ==       $ $T]]%6%6%8 9MM%%a5 4DAw#~((ab2))$qr(3  4 '&/ !/6v/D/DS!/L ,GFOWV_wvH  " "9.I JH  KK    KK   !u~**  ,$ !$CJ$$%4o$F!6?Dwv,"-D GGT4L !   tT+;+= > LL " " $ LL  !(('&/J  JJLrqN)__name__ __module__ __qualname__rPr^rarbrhrqrprr&s\;|1 B) Frqrc eZdZUdZgdgdgdgdgdgdgdgd gZgd gd gd gd gdgdgdgdgZejjZ ejjZ e jdge je Dcgc]}|jc}}e je Dcgc]}|jc}}e j de j dde j"e j de j ddgZgZeeed<gZeeeeeeffed<gZeeeeeeffed<dZdZd 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)rHe~z(Set escape character; ``none'' = disable)rBcNzSelect encryption algorithm.)macsmNz.Specify MAC algorithms for protocol version 2.)rZpNz7Connect to this port. Server must be on the same port.) localforwardrNzK%= H++<rctjr tdtjg}|ffd }|t_tj |tj jS)Nzcan't ask 2 questions at once!c|sy|dk(rtj|dk(rDtjddj |}~dt_j |ydt |cxkrdkr-nn*|j|rtj|yyt |dk(r+|r(rtjd|jyyy) N z r r7z ) rstoprwritercallbackrrpop)chrespstrespdechos rpgotCharz!deferredAskFrame..gotCharEs  < LLN : KK WWT]F!EN JJv   3r7 S KKO B W\d K( HHJ#\rq)rr ValueErrorrDeferredrcanvas focus_force)questionrrrrs ` @rpdeferredAskFramer ?sY ~~9:: A D*EN KK LL Hrqc ttjdd}d|vr'|jd}|||dz|z}||dz|dz=|ddD]2} |j|}|dddk(r||dzddk7rg|||dz4t j }|j t j}t|a tjtjtjdta tj|tj+D]G\}}|s t-t|st/t|j1tj2|Itj4D]?\}\} } tj6j1tj2d |d | d | Agt_tj8D]?\}\} } tj6j1tj2d |d | d | Agt_t;j<|d a|jAdt:jBt>jDzdzt:jFt>jHzdzfzt>jtjtKjL||j tdr tds dtdvrtjOn|jQtSjTtj(tVy#t$rYwxYw#t j"$rB}t%d |ztj'tj(dYd}~d}~wwxYw)Nr!z-lr%r,z-or-)sidefillexpandz ERROR: %sr{r|r})rz%dx%dr*)rrYr[r),rkargvindexrrNTkwithdrawToplevelrmenupackTOPBOTHrr parseOptionsr UsageErrorprintopt_helprlitemshasattrgetattrrxrwrr`rr VT100Framergeometry fontWidthr3 fontHeightr2rinstallrhmainlooprrun exitStatus) rnrargroottopukrrrhrps rpr'r'`s 88ABS#8"$QQ  :: 8B W[[Bqc2$at*<=>G--> 8B W[[Bqc2$at*<=>G   td 3EMM   u{{ *Q .0B0BU\\0QTU0U V W JJGKKJ  dMMOGFOwv0F   KKMHHZI       kAo  s*/M;M" MM"N757N22N7cddlm}datj|j t j)Nrfailurer%)twisted.pythonr2r(rerrFailurerrr1s rprrs+&JGGGOO  LLN rqc"eZdZdZdZdZdZy)rTc,tjyr)rrrs rp stopFactoryzSSHClientFactory.stopFactorys  rqctSr)r)rmaddrs rp buildProtocolzSSHClientFactory.buildProtocols !##rqcdtjdd|jd|jy)NrzConnection Failed, Reason: z: )r showwarningtyper;)rm connectorreasons rpclientConnectionFailedz'SSHClientFactory.clientConnectionFaileds+  +FKK=6<<. I rqN)rrrnoisyr8r;rArrqrprrs E$ rqrc0eZdZdZdZdZdZdZdZy)rcd||fzay)NzDconch: Remote side disconnected with error code %i conch: reason: %s)r()rmcodedescs rp receiveErrorzSSHClientTransport.receiveErrors VTl  rqcTd||fzatjj|||y)Nz>conch: Sending disconnect with error code %i conch: reason: %s)r(r rsendDisconnect)rmrEr@s rprIz!SSHClientTransport.sendDisconnects3 PVn   $$33D$GrqcL|s tdrtjd|zyy)NrzReceived Debug Message: %s)rrr)rm alwaysDisplaymessagelangs rp receiveDebugzSSHClientTransport.receiveDebugs" GEN GG07: ;+rqcttd|ddi}|dk(rtjdS|dk(r(tjt j dStd|jjjk(rtd}td}nvdjtd|jjj}djtd|jjj}tj|d}d j|d d d ||}|d z }t|dj|j|||S)NrYz known-hostsr!r% bad host keyz{} ({})z{},{}rzNThe authenticity of host '{}' can't be established. {} key fingerprint is {}.DSARSAsssh-dsssssh-rsaz9 Are you sure you want to continue connecting (yes/no)? )rrrsucceedfailr ConchErrorr getPeerrYrrgetNSr  addCallback_cbVerifyHostKey)rmpubKey fingerprintgoodKeyrYkhHostkeyTypequess rp verifyHostKeyz SSHClientTransport.verifyHostKeysC !&=$:OP a<==# # \::e..~>? ?v$.."8"8":"?"??v  ''9O9O9Q9V9VW 9O9O9Q9V9VWll6*1-G#V"6w?  Q QD#D!,88%%vvw rqc t|jdvr(tddj|j|||S|jdk(r*tj dt jd tj d|dd d d |d ttjjd d5}tj|}|j d|d|d|dddy#1swYyxYw#t$r%tj t jwxYw)N)yesnozPlease 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)lowerr rYrZrrrrVopenospath expanduserbase64 b64encode BaseExceptionrr)rmansr[r^r_ known_hosts encodedKeys rprZz#SSHClientTransport._cbVerifyHostKeys 99;m +#$BAFRR%%vvw  99;$  KK; <"">2 2 # KK5A'JL  bgg(()=>D H #--f5 !!Bvhay*"FG H H H # JJL"" " #s+9A D 0C=4D =DD D .D7ctdr td}ntj}|jt |t y)Nr[)rgetpassgetuserrequestServiceSSHUserAuthClient SSHConnection)rmr[s rpconnectionSecurez#SSHClientTransport.connectionSecures6 6?6?D??$D -dMODErqN) rrrrGrIrNrarZrwrrqrprrs" H< :#*Frqrc<eZdZUgZeeed<ddZdZdZ dZ y)ru usedFilesNcd|s#dj|jtd}t|dS)Nz{}@{}'s password: rYr)rr[rr )rmprompts rp getPasswordzSSHUserAuthClient.getPasswords,)00GFOLF**rqctjDcgc]}||jvs|}}|sy|d}tj||jj |t jj|}|dz }t jj|sy tjj|jScc}w#t$r|jcYSwxYw)Nrz.pub)rrryrrrrhrirjexistsr KeyfromFileblobrm getPublicKey)rmxfilesfiles rprzSSHUserAuthClient.getPublicKeys#--Iq$..1HIIQx   d#ww!!$' ww~~d#  '88$$T*//1 1J '$$& & 'sCC*,CC87C8ctjj|jd}tjj |sy t j tjj|jS#tj$rY}|jddk(r=d|jdz}t|dj|jdcYd}~SYd}~yd}~wwxYw)Nrzencrypted key with no passwordEnter passphrase for key '%s': )rhrirjryr~rrTr rr keyObject BadKeyErrorrnr rY_cbGetPrivateKey)rmrrr{s rp getPrivateKeyzSSHUserAuthClient.getPrivateKeysww!!$.."45ww~~d# Y==!2!24!8!B!BC C Yvvay<<:T^^B=OO'2>>t?T?TVWXX= Ys;B C6A C1&C61C6cftjj|jd} tj j ||jS#tj$rD|dk(rd|jdz}t|dj|j|dzcYSwxYw)Nr)passwordr%rrr!) rhrirjryr rrrrr rYr)rmrncountrr{s rprz"SSHUserAuthClient._cbGetPrivateKeysww!!$.."45 88$$TC$8BB B z69KKF#FA.::%%uqy   s*AAB0/B0r) rrrryrrrr|rrrrrqrprurus%ItCy+ ' Y rqruceZdZdZy)rvc tds|jttjrQtjD]>\}}t j |t j||t j@tjrvtjD]b\}}tjdj||t jd|f}|jd|||j|<dyy)Nrz&asking for remote forwarding for {}:{}z0.0.0.0z tcpip-forward)r openChannel SSHSessionrr listenTCPr SSHListenForwardingFactory SSHListenClientForwardingChannelrrrrpackGlobal_tcpip_forwardsendGlobalRequest)rmrhostportrdatas rpserviceStartedzSSHConnection.serviceStarted-sy!   Z\ *  '.'<'< # 8!!99h (S(S   ! !(/(>(> ;$ H<CC"H "::Iz;RS&&=2:##J/ ; "rqN)rrrrrrqrprvrv,s;rqrvc@eZdZdZdZdZdZdZdZdZ dZ d Z y ) rssessionc4d|_tj}tdr|j|_n|j |_|j|_|j t_ tjjtdr9|jj|dtj tdntdrtdrVt"j$j'dd}d }tj(||d }|jj|d ||jj|d tj tdn|td sVt"j$j'dd}d }tj(||d }|jj|d ||jj|dd|jj*j*j-dy)Nr!rHrs subsystemr0rTERMxterm)Prrrspty-reqexecrsshellrq) escapeModer SSHSessionClientr handleInput dataReceivedrsendEOFconnectionLostrrrr conn sendRequestrNSrhenvironr~packRequest_pty_reqr setTcpNoDelay)rmfoortermwinSize ptyReqDatas rp channelOpenzSSHSession.channelOpenGs  $ $ & 8 !--AN!ZZAN<<   " ;  II ! !$ fii @R6S T Y u~zz~~fg6($88wK  %%dJ C II ! !$ '):L0M N7#zz~~fg6($88wK  %%dJ C II ! !$# 6 %%33A6rqc^|dvrd|_|j|y|jdk(r|tdk(rd|_y|jdk(rd|_|dk(r*tjdt j y|dk(r7tjtjtjy|dk(r:tjd |jjjy|jd |zyd |_|j|y) N)rerr!rHr%.zdisconnecting from escaperzrekeying connectionrr)rrrrrrrrhkillgetpidsignalSIGSTOPrr sendKexInit)rmchars rprzSSHSession.handleInpuths < DO JJt  __ !dgh.?&?DO __ !DOs{34  V^^4-. ##//1 JJsTz "DO JJt rqc|jd}tdrtt|tj |y)Nzutf-8r)rrrreprrrrmrs rprzSSHSession.dataReceiveds0{{7# 9  $t*  Drqc|tjk(r_tjdt |zt j j|t j jyy)Nzgot %s stderr data) r EXTENDED_DATA_STDERRrrrrkrrflush)rmrrs rp extReceivedzSSHSession.extReceivedsM // / GG(3t94 5 JJ  T " JJ    0rqcjtjdtjj y)Nzgot eof)rrrkstdinclosers rp eofReceivedzSSHSession.eofReceiveds   rqctjd|zt|jjdk(rt j yy)Nz closed %sr!)rrrrchannelsrrrs rpclosedzSSHSession.closeds8  d"# tyy!! "a ' LLN (rqcttjd|dat j dtzy)Nz>Lrzexit status: %s)rstructunpackr(rrrs rprequest_exit_statuszSSHSession.request_exit_statuss.tT2156  !J./rqc:|jj|yr)rrrs rprzSSHSession.sendEOFs $rqN) rrrrCrrrrrrrrrrqrprrDs0 D7B4   0  rqr__main__)<__doc__rkrrrhrrrktkinterrNtkinter.filedialog filedialogrttkinter.messagebox messageboxrtypingrr twisted.conchrtwisted.conch.client.defaultrtwisted.conch.sshrrr r r r r rtwisted.conch.uirtwisted.internetrrrrr3rrrOrOptionsrrrr(rr r'r ClientFactoryrrrurv SSHChannelrrrrqrprs   ))7   %@@%z'--zzR!U]]R!l      B0f   x--  LF55LF^-22-`;J,,;0Y ##Y x zErq