
    YfG                        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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 d dlmZmZmZ d dlmZmZ d d	lmZm Z   G d
 de          Z!da"da#d a$da%d a&da'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0 G d d          Z1 G d dej2                  Z2 G d dej3                  Z4 G d dej5                  Z5 G d dej6                  Z6d Z7d  Z8e9d!k    r e(             dS dS )"    N)ListTuple)connectdefault)ConchOptions)
ConchError)channelcommon
connection
forwardingsession)reactorstdiotask)logusage)ioTypenetworkStringc            
          e Zd ZU dZdZg dg dg dgZg dg dg dg d	g d
g dgZ ej        dg ej	        d           ej	        d          d ej
                     ej	        d           ej	        dd          g          Z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S )ClientOptionsz(Usage:   conch [options] host [command]
zYconch is a SSHv2 client that allows logging into a remote machine and executing commands.)escapee~)localforwardLNz<listen-port:host:port   Forward local port to remote address)remoteforwardRNz<listen-port:host:port   Forward remote port to local address)nullnzRedirect input from /dev/null.)forkfz(Fork to background after authentication.)ttytz-Tty; allocate a tty even if command is given.)nottyTzDo not allocate a tty.)noshellNz"Do not execute a shell or command.)	subsystemsz-Invoke command (mandatory) as SSH2 subsystem.)r"   r$   zlisten-port:host:port)descr)r   r   commandargumentT)r*   repeat)mutuallyExclusive
optActionsextraActionslocalForwardsremoteForwardsc                    |dk    rd| d<   dS |d         dk    r=t          |          dk    r*t          t          |d                   dz
            | d<   dS t          |          dk    r|| d<   dS t          j        d	| d
           dS )z:
        Set escape character; ``none'' = disable
        noneNr   r   ^      @   zBad escape character 'z'.)lenchrordsysexit)selfescs     M/var/www/html/env/lib/python3.11/site-packages/twisted/conch/scripts/conch.py
opt_escapezClientOptions.opt_escapeO   s     &==!DNNNVs]]s3xx1}} SVr!122DNNNXX]] DNNNH5c55566666    c                     |                     d          \  }}}t          |          }t          |          }| j                            |||ff           dS )zH
        Forward local port to remote address (lport:host:port)
        :N)splitintr1   append)r>   r!   	localPort
remoteHost
remotePorts        r@   opt_localforwardzClientOptions.opt_localforward\   sW     -.GGCLL)	:z	NN	__
!!9z:.F"GHHHHHrB   c                     |                     d          \  }}}t          |          }t          |          }| j                            |||ff           dS )zH
        Forward remote port to local address (rport:host:port)
        rD   N)rE   rF   r2   rG   )r>   r!   rJ   connHostconnPorts        r@   opt_remoteforwardzClientOptions.opt_remoteforwarde   sW     *+&
Hh__
x==""J80D#EFFFFFrB   c                 @    || d<   d                     |          | d<   d S )Nhost r+   )join)r>   rQ   r+   s      r@   	parseArgszClientOptions.parseArgsn   s$    V((7++YrB   N)__name__
__module____qualname__synopsislongdescoptParametersoptFlagsr   Completions	CompleterCompleteUserAtHostcompDatar1   r   r   rF   __annotations__r2   rA   rK   rO   rT    rB   r@   r   r      s        H	*  		
 	
 	
	
 	
 	
M" 	877AAAEEE000>>>KKKH !u +,+EO2IJJJ,U_3JKKK
 

 %E$&&EO),,,EO*T:::
  H 8:M4c5c?2349998:NDsE#s(O345:::7 7 7I I IG G G, , , , ,rB   r   c                  <   t           j        dd          } d| v r0|                     d          }| ||dz            | z   } | |dz   |dz   = | d d          D ]U}	 |                     |          }|d d         dk    r| |dz            d         dk    r
g | ||dz   <   F# t          $ r Y Rw xY wt	                      a	 t
                              |            n[# t          j        $ rI}t          d|            t
          
                                 t          j        d           Y d }~nd }~ww xY wt
          d	         rt
          d
         r:t
          d
         dk    rt           j        }n(t          t
          d
         d          }nt           j        }t           j        }t          j        |           |t           _        nt          j                     t%                       t           j                                        }	 t+          j        |          an# t0          $ r d aY nw xY w	 t3          j        t2          j        d           }n# t0          $ r d }Y nw xY w	 t7          j                     t.          r%t+          j        |t*          j        t.                     |rt3          j        t2          j        |           t
          d         rt
          d         st
          d         s)t3          j        t2          j        t2          j                    n# t.          r%t+          j        |t*          j        t.                     |rt3          j        t2          j        |           t
          d         rt
          d         st
          d         s*t3          j        t2          j        t2          j                    w w xY wt           j        !                                r:t
          d         s-t          d"                    t
          d                              t          j        tF                     d S )Nr7   z-lr6      z-or   -zERROR: r   logfileza+c                  6    t          j        dt                    S Nr   )r   	callLater	reConnect)as    r@   <lambda>zrun.<locals>.<lambda>   s    w'8I'F'F rB   r+   r"   r$   zConnection to {} closed.rQ   )$r<   argvindex
ValueErrorr   optionsparseOptionsr   
UsageErrorprintopt_helpr=   stdoutopenstderrr   startLoggingdiscardLogs	doConnectstdinfilenor"   	tcgetattroldBaseExceptionsignalSIGUSR1r   run	tcsetattrTCSANOWSIGWINCHSIG_DFLisattyformat
exitStatus)argsiargur!   realoutfdoldUSR1s           r@   r   r   |   s   8ABB<Dt||JJtAAI%QQAAAw  	

3A2A2w$4A;q>S#8#8"$QQY 	 	 	D	ooGT""""   mmm u~ 9 	y!S((J+T22
A*

KKK					BmB   -NFF
 
    ; 	0M"ck3/// 	3M&.'222I 	;75> 	;'':J 	;M&/6>:::  	0M"ck3/// 	3M&.'222I 	;75> 	;'':J 	;M&/6>::::	;
z B79#5 B(//@@AAAHZs\   AB
B&%B&8C D+"?D&&D+;H HH# I IIL B N(c                      ddl m}  dat          j        dt
                     t          j        |                                             )Nr   failurer6   g{Gz?)	twisted.pythonr   r   r   rh   _stopReactorr   errFailurer   s    r@   handleErrorr      sK    &&&&&& JdL)))GGOO	rB   c                  P    	 t          j                     d S # t          $ r Y d S w xY wN)r   stopr~   ra   rB   r@   r   r      s8       s    
%%c                     dt           d         v r4t           d                             dd          \  t           d<   t           d<   t           j        sddgt           _        t           d         } t           d         st          j                    t           d<   t           d         sdt           d<   n"t          t           d                   t           d<   t           d         } t           d         }t          j        }t           d	         s"t          j        | t                     t           d	<   t          j	        t           d         t           t                                }t          j        | |t           ||                              t                     d S )
N@rQ   r7   userz~/.ssh/id_rsaz~/.ssh/id_dsaport   zhost-key-algorithms)ro   rE   	identitysgetpassgetuserrF   r   verifyHostKeygetHostKeyAlgorithmsSSHUserAuthClientSSHConnectionr   
addErrback_ebExit)rQ   r   vhkuaos       r@   ry   ry      s*   
gfo+26?+@+@a+H+H( ?,o>6?D6? ,!/++6? /gfo..6?D6?D

C() U)0)EdG)T)T%&

#GFOWmoo
N
NCOD$c22==gFFFFFrB   c                 D    d|  a t          j        dt                     d S )Nzconch: exiting with error 皙?)r   r   rh   r   )r!   s    r@   r   r      s(    1a11Jc<(((((rB   c            	         t          t          j        d          rt          t                     t          j        rdt          j        D ]W\  } }t          j        | t          j	        t          |t                              }t          j                            |           Xt          j        rbt          j        D ]:\  }}t          j        d| d|            t                              ||           ;t          j        ddt"                     t          d         rt          d         r&t                              t'                                 t          d         rt)          j                    rt)          j        d	           t)          j                     t1          d
          D ]E}	 t)          j        |           # t4          $ r}d	d l}|j        |j        k    r Y d }~<d }~ww xY wd S d S )N
sendIgnorez!asking for remote forwarding for rD   beforeshutdownr&   agentr    r      )hasattrconn	transport
_KeepAlivero   r1   r   	listenTCPr   SSHListenForwardingFactory SSHListenClientForwardingChannelrG   r2   r   msgrequestRemoteForwardingaddSystemEventTriggerbeforeShutdownopenChannel
SSHSessionosr    _exitsetsidrangecloseOSErrorerrnoEBADF)rH   hostportr)   rJ   r   r   r   s          r@   	onConnectr      s    t~|,, 4 )#*#8 	) 	)Ix!5($D  A %%a(((( L$+$: 	? 	? JGO
OOXOOPPP((X>>>>%h
NKKK9 '!1 '&&&v 799 	HQKKK
	q 	 	A   7ek)) *)))) 	 	s   &F;;
G$GG$c                  h    t                       t          j        j                                         d S r   )r   r   r   loseConnectionra   rB   r@   ri   ri     s+    N++-----rB   c                      t           j        } | D ]9\  }}t          j        d| d|            t                              |           :d S )Nzcancelling rD   )ro   r2   r   r   r   cancelRemoteForwarding)r2   rJ   r   s      r@   r   r     s`    +N . 0 0
H5j55855666##J////0 0rB   c                  X    t           d         st          j        dt                     d S d S )N	reconnectr   )ro   r   rh   r   ra   rB   r@   stopConnectionr     s2    ; -#|,,,,,- -rB   c                   &    e Zd Zd Zd Zd Zd ZdS )r   c                     || _         d | _        t          j        | j                  | _        | j                            d           d S )Ni,  )r   globalTimeoutr   LoopingCall
sendGloballcstart)r>   r   s     r@   __init__z_KeepAlive.__init__  s?    	!"4?33crB   c                     | j                             ddd          }|                    | j                   t	          j        d| j                  | _        d S )Ns"   conch-keep-alive@twistedmatrix.comrB   r7   	wantReply   )r   sendGlobalRequestaddBoth	_cbGlobalr   rh   	_ebGlobalr   )r>   ds     r@   r   z_KeepAlive.sendGlobal   sX    I''13! ( 
 
 	
		$.!!!$.r4>BBrB   c                 X    | j         r"| j                                          d | _         d S d S r   )r   cancel)r>   ress     r@   r   z_KeepAlive._cbGlobal'  s:     	&%%'''!%D	& 	&rB   c                 b    | j         r'd | _         | j        j                                         d S d S r   )r   r   r   r   r>   s    r@   r   z_KeepAlive._ebGlobal,  s<     	1!%DI..00000	1 	1rB   N)rU   rV   rW   r   r   r   r   ra   rB   r@   r   r     sS          C C C& & &
1 1 1 1 1rB   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
r   c                 B    | a g | _        i | _        t                       d S r   )r   r1   r2   r   r   s    r@   serviceStartedzSSHConnection.serviceStarted3  s$     rB   c                 p    | j         }g | _         |D ]}|                                 t                       d S r   )r1   r   r   )r>   lfr)   s      r@   serviceStoppedzSSHConnection.serviceStopped:  sH     	 	ArB   c                    t          j        d|f          }|                     d|d          }t          j        d| d|            |                    | j        ||           |                    | j        ||           d S )N0.0.0.0s   tcpip-forwardr7   r   zrequesting remote forwarding rD   )	r   packGlobal_tcpip_forwardr   r   r   addCallback_cbRemoteForwardingr   _ebRemoteForwarding)r>   rJ   r   datar   s        r@   r   z%SSHConnection.requestRemoteForwardingA  s    2Iz3JKK""#3TQ"GGG
GGXGGHHH	d.
HEEE	T-z8DDDDDrB   c                     t          j        d| d|            || j        |<   t          j        t          | j                             d S )Nzaccepted remote forwarding rD   )r   r   r2   repr)r>   resultrJ   r   s       r@   r   z!SSHConnection._cbRemoteForwardingH  sQ    EjEE8EEFFF*2J'T())*****rB   c                 d    t          j        d| d| d           t          j        |           d S )Nzremote forwarding rD   z failedr   r   )r>   r!   rJ   r   s       r@   r   z!SSHConnection._ebRemoteForwardingM  s7    CZCC(CCCDDD




rB   c                    t          j        d|f          }|                     d|           t          j        d|            	 | j        |= n# t          $ r Y nw xY wt          j        t          | j                             d S )Nr   s   cancel-tcpip-forwardzcancelling remote forwarding )r   r   r   r   r   r2   	Exceptionr   )r>   rJ   r   s      r@   r   z$SSHConnection.cancelRemoteForwardingQ  s    2Iz3JKK6===<
<<===	#J// 	 	 	D	T())*****s   A 
AAc                    t          j        d|           t          j        |          \  }}t          j        | j                   t          j        |           |d         | j        v r=| j        |d                  }t          j        d|            t          ||||           S t          t          j        d          )NzFTCP r7   zconnect forwarding )remoteWindowremoteMaxPacketr   zdon't know about that port)	r   r   r   unpackOpen_forwarded_tcpipr2   SSHConnectForwardingChannelr   r   OPEN_CONNECT_FAILED)r>   
windowSize	maxPacketr   remoteHPorigHP	connectHPs          r@   channel_forwarded_tcpipz%SSHConnection.channel_forwarded_tcpip[  s       !!!%@FF&#$$$A;$---+HQK8IG5)55666.
ITX    .0L  rB   c                 *   t          j        d|            t          j        | j                   t          | j                  dk    r$t          j        d           t	                       d S | j        j        d                             | |           d S )Nzconnection closing r7   zstopping connectionr   )r   r   channelsr9   r   	__class__	__bases__channelClosed)r>   r	   s     r@   r  zSSHConnection.channelClosedk  s    /g//000t}""G)*** N$Q'55dGDDDDDrB   N)rU   rV   rW   r   r   r   r   r   r   r  r  ra   rB   r@   r   r   2  s            E E E+ + +
  + + +   E E E E ErB   r   c                   Z    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )r   s   sessionc                 0    t          j        d j         d           t          d         r4 j                             ddd          }|                    d            t          d	         rd S t          d
         rt          d         st          d         st                       t          j	                    }t          d         r!t          d         sd _
         j        |_        n j        |_         fd|_        t          j        |           _        d}t          d         r; j                             dt#          j        t          d
                              d S t          d
         rt          d         rt&          j        d         }t+          j        |t.          j        d          }t3          j        d|          }t          j        ||d          } j                             d|           t9          j        t8          j         j                    j                             dt#          j        t          d
                              d S t          d         st&          j        d         }t+          j        |t.          j        d          }t3          j        d|          }t          j        ||d          } j                             d|           t9          j        t8          j         j                    j                             dd           d S )Nzsession z openr   s   auth-agent-req@openssh.comrB   r7   r   c                 *    t          j        |           S r   r   )xs    r@   rk   z(SSHSession.channelOpen.<locals>.<lambda>  s    

 rB   r&   r+   r"   r$   r   c                 ,                                     S r   )sendEOF)r  r>   s    r@   rk   z(SSHSession.channelOpen.<locals>.<lambda>  s    T\\^^ rB   r   r(   s	   subsystemTERM123456784H s   pty-reqs   execs   shell)r   r   idro   r   sendRequestr   _enterRawModer   SSHSessionClient
escapeModehandleInputdataReceivedwriteconnectionLostr   
StandardIOr
   NSr   environfcntlioctlr"   
TIOCGWINSZstructunpackpackRequest_pty_reqr   r   _windowResized)	r>   foor   cr   termwinszwinSize
ptyReqDatas	   `        r@   channelOpenzSSHSession.channelOpeny  s   )47)))***7 	,	%%3SA &  A II**+++9 	FI 	75> 	'':J 	OOO$&&8 	(WW%5 	(DO!-ANN!ZAN3333%a((
; 	7I!!$fi	@R6S6STTTTTY 	7u~ Dz&)B
CC -e44$8wKK
	%%dJ
CCCfot/BCCCI!!$79;M1N1NOOOOO7# Dz&)B
CC -e44$8wKK
	%%dJ
CCCfot/BCCCI!!$#66666rB   c           
      v   |dv rd| _         |                     |           d S | j         dk    r|t          d         k    r	d| _         d S | j         dk    rId| _         |dk    r$t          j        d           t                       d S |dk    rd }t          j        d	|           d S |d
k    r4t          j        d           | j        j	        
                                 d S |dk    r| j                            d           | j        j                                        }|                                 |D ]M}| j                            t          d                    || j        j        |                                        Nd S |                     d|z              d S d	| _         |                     |           d S )N)   
   r7   r   r6      .zdisconnecting from escape   c                     t                       t          j                                         t          j                                         t          j        t          j                    t          j	                   t                       d S r   )_leaveRawModer<   rt   flushrz   r   killgetpidr   SIGTSTPr  ra   rB   r@   _z!SSHSession.handleInput.<locals>._  sX    !OOOJ$$&&&IOO%%%GBIKK888!OOOOOrB   r      Rzrekeying connection   #s'   
The following connections are open:
z
  #{} {}
   ~)r  r  ro   r   r   r   r   rh   r   r   sendKexInitr   r  keyssortr   r   )r>   charr;  r  	channelIds        r@   r  zSSHSession.handleInput  s   >!!DOJJt_!!dgh.?&?&?DOOO_!!DOt||3444   $ $ $ !!Q'''-...	#//111
  !OPPP9-2244!)  IJ$$%*11 )49+=i+H      JJtd{#####DOJJtrB   c                 :    | j                             |           d S r   )r   r  r>   r   s     r@   r  zSSHSession.dataReceived  s    
rB   c                 B   |t           j        k    rt          j        dt	          |           d           t          t          j                  t          k    r&t          j        j	        
                    |           d S t          j        
                    |           d S d S )Nzgot z stderr data)r   EXTENDED_DATA_STDERRr   r   r9   r   r<   rv   strbufferr  )r>   r#   r   s      r@   extReceivedzSSHSession.extReceived  s    
///G23t99222333cj!!S((
!''-----
  &&&&& 0/rB   c                 `    t          j        d           | j                                         d S )Nzgot eof)r   r   r   loseWriteConnectionr   s    r@   eofReceivedzSSHSession.eofReceived  s,    	
&&(((((rB   c                 h    t          j        d|             | j                            |            d S )Nzremote side closed )r   r   r   	sendCloser   s    r@   closeReceivedzSSHSession.closeReceived  s7    ,d,,---	D!!!!!rB   c                     t          j        d|             t          j        t          | j        j                             d S )Nzclosed )r   r   r   r   r  r   s    r@   closedzSSHSession.closed  s>     $  !!!TY'(()))))rB   c                     t          t          j        d|          d                   at	          j        dt                      d S )Nz>Lr   zexit status: )rF   r%  r&  r   r   r   rE  s     r@   request_exit_statuszSSHSession.request_exit_status  s?    tT221566
,
,,-----rB   c                 :    | j                             |            d S r   )r   r  r   s    r@   r  zSSHSession.sendEOF  s    	$rB   c                 8    | j                                          d S r   )r   pauseProducingr   s    r@   stopWritingzSSHSession.stopWriting  s    
!!#####rB   c                 8    | j                                          d S r   )r   resumeProducingr   s    r@   startWritingzSSHSession.startWriting  s    
""$$$$$rB   c                    t          j        dt          j        d          }t	          j        d|          }|d         |d         |d         |d         f}| j                            | dt	          j        dg|R             d S )	Nr   r  r  r7   r6   r   s   window-changez!4L)	r"  r#  r"   r$  r%  r&  r   r  pack)r>   r   r,  r-  newSizes        r@   r(  zSSHSession._windowResized  sy    As~z::-e,,!*gaj'!*gaj@	d$4fk%6R'6R6R6RSSSSSrB   N)rU   rV   rW   namer/  r  r  rJ  rM  rP  rR  rT  r  rX  r[  r(  ra   rB   r@   r   r   v  s        D'7 '7 '7V+ + +Z  ' ' ') ) )" " "* * *
. . .
     $ $ $% % %T T T T TrB   r   c                       e Zd ZdS )r   NrU   rV   rW   ra   rB   r@   r   r             DrB   r   c                       e Zd ZdS )r   Nra  ra   rB   r@   r   r     rb  rB   r   c                      t           sd S t          j                                        } t	          j        | t          j        t                     da d S rg   )
_inRawModer<   rz   r{   r"   r   r   _savedRawMode)r   s    r@   r6  r6    sA     					BM"ck=111JJJrB   c                  .   t           rd S t          j                                        } 	 t	          j        |           }|d d          }|d         t          j        z  |d<   |d         t          j        t          j        z  t          j	        z  t          j
        z  t          j        z  t          j        z  t          j        z   z  |d<   t          t          d          r|d         t          j         z  |d<   |d         t          j        t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z   z  |d<   t          t          d          r|d         t          j         z  |d<   |d         t          j         z  |d<   d|d         t          j        <   d|d         t          j        <   |at	          j        | t          j        |           da d S # t:          $ r t=          j        d           Y d S w xY w)Nr   IUCLCr   IEXTENr7      znot a typewriter!) re  r<   rz   r{   r"   r|   IGNPARISTRIPINLCRIGNCRICRNLIXONIXANYIXOFFr   rh  ISIGICANONECHOECHOEECHOKECHONLri  OPOSTVMINVTIMErf  r   r   r~   r   r   )r   r}   news      r@   r  r    s    					B*mB!!!f
 Q#*$AQJii i h	
 i i
 
A 3   	)Vsyj(CF QHjh h i	
 i j
 
A 3!! 	*Vszk)CF Q39*$AAsxAsyb#+s+++


O  % % %#$$$$$$%s   G2 2HH__main__):r"  r   r   r   r%  r<   r"   typingr   r   twisted.conch.clientr   r   twisted.conch.client.optionsr   twisted.conch.errorr   twisted.conch.sshr	   r
   r   r   r   twisted.internetr   r   r   r   r   r   twisted.python.compatr   r   r   ro   r   r   r}   re  rf  r   r   r   ry   r   r   ri   r   r   r   r   
SSHChannelr   r   r   r6  r  rU   ra   rB   r@   <module>r     s2     				   



 



         1 1 1 1 1 1 1 1 5 5 5 5 5 5 * * * * * * N N N N N N N N N N N N N N 1 1 1 1 1 1 1 1 1 1 % % % % % % % % 7 7 7 7 7 7 7 7R, R, R, R, R,L R, R, R,l 


9 9 9x
 
 
  G G G*) ) )! ! !H. . .
0 0 0- - -
1 1 1 1 1 1 1 12AE AE AE AE AEJ, AE AE AEHET ET ET ET ET# ET ET ETP	 	 	 	 	z'R 	 	 		 	 	 	 	*"H 	 	 	  / / /d zCEEEEE rB   