%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/client/ssh/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyo

�
���^c@@sgdZddlmZmZmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
ZddlZddlZddlmZe	je�Zejdej�Zejd�Zejdej�ZdZejd	ed
�Zdefd��YZd
efd��YZd�Zd�Z de!fd��YZ"dS(u#
Manage transport commands via ssh
i(tabsolute_importtprint_functiontunicode_literalsN(tsixu(?:.*)[Pp]assword(?: for .*)?:u.*\(yes\/no\).*uEnter passphrase for keyuA_edbc7885e4f9aac9b83b35999b68d015148caf467b78fa39c05f669c0ff89878u(?:^|\r?\n)u(?:\r?\n|$)t
NoPasswdErrorcB@seZRS((t__name__t
__module__(((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyR"stKeyAcceptErrorcB@seZRS((RR(((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyR&scC@s`dj|�}tjjtjj|��sItjtjj|��ntj|dt�dS(u.
    Generate a key for use with salt-ssh
    u!ssh-keygen -P "" -f {0} -t rsa -qtshellN(	tformattostpathtisdirtdirnametmakedirst
subprocesstcalltTrue(Rtcmd((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pytgen_key*scK@sy|drfy"ddl}|j||�}Wqutk
rbtjd�tjtjj	j
�quXnt||�}|S(uB
    Return the correct shell interface for the target system
    uwinrmiNu)The saltwinshell library is not available(tsaltwinshelltShelltImportErrortlogterrortsystexittsalttdefaultst	exitcodest
EX_GENERIC(toptstkwargsRR((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt	gen_shell4s


RcB@s�eZdZddddddeededdedd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd	d
�Z
d�Zd�Zd
�Zd�Zed�Zedd�ZRS(uH
    Create a shell connection object to encapsulate ssh executions
    cC@s�||_|jd�|_||_||_|rBtj|�n||_||_||_	||_
|	|_|
|_||_
||_||_|dkr�dn||_dS(Nu[]u(RtstripthosttusertportRt	text_typetpasswdtprivtpriv_passwdttimeouttsudotttytmodstidentities_onlytremote_port_forwardstNonetssh_options(tselfRR#R$R%R'R(R)R*R+R,R-R.t	sudo_userR/twinrmR1((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt__init__Hs											cC@sYxR|jd�D]A}|jd�r)|S|jd�r>qnd|krPqn|SW|S(uG
        Parse out an error and return a targeted error string
        u
ussh:uPseudo-terminaluto the list of known hosts.(tsplitt
startswith(R2terrstrtline((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt	get_errorjscC@s�dg}|jr"|jd�n
|jd�|jjdd�dkrZ|jd�n|jd	j|j��|jjd
�r�|jd�n|jjd�r�|jdd
g�n|jjd�}|rtjj	|�r|jdj|��n|j
r%|jdj|j
��n|jrY|jdkrY|jdj|j��n|jr~|jdj|j��n|j
r�|jd�ng}x$|D]}|jdj|��q�Wdj|�S(uJ
        Return options for the ssh command base for Salt to call
        uKbdInteractiveAuthentication=nouPasswordAuthentication=yesuPasswordAuthentication=nou_ssh_versioniii	uGSSAPIAuthentication=nouConnectTimeout={0}uignore_host_keysuStrictHostKeyChecking=nouno_host_keysuUserKnownHostsFile=/dev/nulluknown_hosts_fileuUserKnownHostsFile={0}uPort={0}uagent-forwardinguIdentityFile={0}uUser={0}uIdentitiesOnly=yesu-o {0} u(i(ii	(R'tappendRtgetR	R*textendR
RtisfileR%R(R$R.tjoin(R2toptionstknown_hoststrettoption((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt	_key_optsxs6		
	
			
cC@sjddg}|jddkr/|jd�n|jdj|j��|jjd�rj|jd�n|jjd	�r�|jdd
g�n|jr�|jddg�n|jd
ddddg�|jr�|jdj|j��n|jr|jdj|j��n|j	r0|jd�ng}x$|D]}|jdj|��q=Wdj
|�S(u/
        Return options to pass to ssh
        uControlMaster=autouStrictHostKeyChecking=nou_ssh_versionii	uGSSAPIAuthentication=nouConnectTimeout={0}uignore_host_keysuno_host_keysuUserKnownHostsFile=/dev/nulluPasswordAuthentication=yesuPubkeyAuthentication=yesuPasswordAuthentication=nouKbdInteractiveAuthentication=nou"ChallengeResponseAuthentication=nou
BatchMode=yesuPort={0}uUser={0}uIdentitiesOnly=yesu-o {0} u(ii	(RR;R	R*R<R=R'R%R$R.R?(R2R@RBRC((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt_passwd_opts�s8		
		
	
			
cC@s,djg|jD]}dj|�^q�S(Nu u-o {0}(R?R1R	(R2topt((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt	_ssh_opts�s	cC@sM|jrIdjddj|j�|j�|j|j�|j|j�SdS(u:
        Return the string to execute ssh-copy-id
        u {0} {1} '{2} -p {3} {4} {5}@{6}'ussh-copy-idu
-i {0}.pubN(	R'R	R(RER%RGR$R#R0(R2((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt_copy_id_str_old�s			
cC@sM|jrIdjddj|j�|j�|j|j�|j|j�SdS(uq
        Since newer ssh-copy-id commands ingest option differently we need to
        have two commands
        u{0} {1} {2} -p {3} {4} {5}@{6}ussh-copy-idu
-i {0}.pubN(	R'R	R(RER%RGR$R#R0(R2((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt_copy_id_str_new�s			
cC@sm|j|j��\}}}tjjj|kr`d|kr`|j|j��\}}}n|||fS(uH
        Execute ssh-copy-id to plant the id file on the target
        uUsage(t_run_cmdRHRRRtEX_OKRI(R2tstdouttstderrtretcode((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pytcopy_id�s!!usshcC@s|g}|dkr(|j|j�n|jrM|dkrM|jd�n|js_|jr�|j|jrz|j�p�|j��n|dkr�|jr�|jdjg|jj	d�D]}dj
|�^q���n|jr�|j|j��n|j|�dj|�S(u2
        Return the cmd string to execute
        uscpusshu-t -tu u,u-R {0}(
R;R#R,R'R(RDRER/R?R6R	R1RG(R2Rtsshtcommandtitem((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt_cmd_str�s	+2	
cC@shyOtj|dtdtjdtj�}|j�}|d|d|jfSWntk
rcd	SXdS(
u4
        Cleanly execute the command string
        RRMRLiiulocalu
Unknown ErrorN(ulocalu
Unknown ErrorN(RtPopenRtPIPEtcommunicatet
returncodet	ExceptionR0(R2Rtproctdata((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt_old_run_cmd
s	
cc@s�y�tjjj|dtdtjdtj�}xztr�tjd�|j	�}|j
�}|j}|dkr�|dkr�Pn|r�|j
|�}n|||fVq3WWntk
r�dVnXdS(	u
        cmd iterator
        RRMRLg�������?uu
Unknown ErrorN(uu
Unknown ErrorN(Rtutilstnb_popentNonBlockingPopenRRRUttimetsleeptrecvtrecv_errRWR0R:RX(R2RRYtoutterrtrcode((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt_run_nb_cmds$		
	
cc@s�g}g}d}|j|�}dj|�}|jrQ|j|jd�}ntj|�x]|j|�D]L\}}}|dk	r�|j|�n|dk	r�|j|�ndVqnWdj	|�dj	|�|fVdS(u/
        Yield None until cmd finished
        u#Executing non-blocking command: {0}u*iuNu******(NNN(
R0RSR	R'treplaceRtdebugRfR;R?(R2Rtr_outtr_errRetlogmsgRcRd((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pytexec_nb_cmd6s	
	cC@s�|j|�}dj|�}|jr?|j|jd�}nd|ksWd|krttjd�tj|�n
tj|�|j|�}|S(u*
        Execute a remote command
        uExecuting command: {0}u*iudecode("base64")ubase64.b64decode(u.Executed SHIM command. Command logged to TRACEu******(RSR	R'RgRRhttraceRJ(R2RRkRB((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pytexec_cmdLs	

cC@s�|r+|jdjtjj|���n|j}d|krRdj|�}ndj|||�}|j|dd�}dj|�}|jr�|j|jd
�}nt	j
|�|j|�S(u8
        scp a file or files to a remote system
        umkdir -p {0}u:u[{0}]u{0} {1}:{2}RPuscpuExecuting command: {0}u*iu******(RnR	R
RR
R#RSR'RgRRhRJ(R2tlocaltremoteRR#RRk((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pytsend^s%		
icC@s_|s
dStjjj|dtdtdddtd	dd
tdt�}d}t}d}d}d}	z�x�|jr/|j�\}
}|
r�||
7}|	|
}n|
}|r�||7}n|r�tj	|�r�t}n|rt
j	|�r|js�dS|j|j�qmn|rot
j	|�ro|ro|js<d S||krh|j|j�|d7}qmqd!Sn�|r�tj	|�r�|r�|jd�qmq|jd�dj|
�}|ddfSnG|r|jd�rtjjj|jdd"�d}
|j|
�n|
r|
}	ntjd�qmW|||jfSWd|jdtdt�XdS(#ul
        Execute a shell command via VT. This is blocking and assumes that ssh
        is being run
        uuNo command or passphrasei�Rt
log_stdouttlog_stdout_levelutracet
log_stderrtlog_stderr_levelt
stream_stdoutt
stream_stderriu Private key file need passphrasei�u0Permission denied, no authentication informationiuPassword authentication faileduyesunouTThe host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
{0}u_||ext_mods||_t
separatorsu,u:u|_E|0|g{�G�z�?Nt	terminatetkill(uuNo command or passphrasei�(uu Private key file need passphrasei�(uu0Permission denied, no authentication informationi�(uuPassword authentication failedi�(u,u:(RR\tvttTerminalRtFalsethas_unread_dataRatRSTR_REtsearcht"SSH_PRIVATE_KEY_PASSWORD_PROMPT_RER)tsendlinetSSH_PASSWORD_PROMPT_RER'tKEY_VALID_RER	tendswithtjsontdumpsR-R_R`t
exitstatustclose(R2Rt
key_accepttpasswd_retriesttermtsent_passwdt
send_passwordt
ret_stdoutt
ret_stderrt
old_stdoutRLRMtbufftmods_raw((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyRJtsp	


			


	"	N(RRt__doc__R0R}R5R:RDRERGRHRIRORSR[RfRlRnRqRJ(((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyRDs:		$	(									(#R�t
__future__RRRtreR
RR_tloggingRtsalt.defaults.exitcodesRtsalt.utils.jsontsalt.utils.nb_popent
salt.utils.vttsalt.extRt	getLoggerRRtcompiletMR�R�R�tRSTRRRXRRRR!tobjectR(((s9/usr/lib/python2.7/site-packages/salt/client/ssh/shell.pyt<module>s.	
	

Zerion Mini Shell 1.0