Ë
    c¤j¾3  ã                  ód  — d Z ddlm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Z e e	e«      j                  «       j                   dz  «      ZdZdZd	Zd
„ Z	 	 	 d 	 	 	 	 	 	 	 	 	 	 	 d!d„Zd"d„Zd#d„Zd$d„Zd%d„Zd&d„Zd'd„Zd(d„Zd)d„Z G d„ d«      Zd*d„Z 	 	 d+	 	 	 	 	 	 	 d,d„Z!	 	 d+	 	 	 	 	 	 	 	 	 d-d„Z"e#dk(  rn e$ejJ                  «      dk  r& e&dejN                  ¬«        ejP                  d«        e"ejJ                  d   djS                  ejJ                  dd «      «       yy).u  SSH-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð½Ð° Ñ…Ð¾Ñ�Ñ‚Ð°Ñ… Ð´ÐµÐ²Ð°Ð¹Ñ�Ð¾Ð².

Ð£Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð»ÐµÐ¶Ð°Ñ‚ Ð² Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ð¹ Ð‘Ð” `ssh_hosts.db`:
Ð¸Ð¼Ñ� Ð´ÐµÐ²Ð°Ð¹Ñ�Ð°, IP, Ð¿Ð°Ñ€Ð¾Ð»ÑŒ, Ð»Ð¾Ð³Ð¸Ð½ (Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ `root`), Ð¿Ð¾Ñ€Ñ‚ Ñ�ÐµÑ€Ð²ÐµÑ€Ð° (Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ `22`).
é    )ÚannotationsN)ÚPath)ÚOptionalzssh_hosts.dbÚrooté   é   c                 ó„  — t        j                  t        «      } t         j                  | _        | j                  «       }|j                  d«       |j                  d«       |j                  «       D �ch c]  }|d   ’Œ	 }}d|vr|j                  d«       d|vr|j                  d«       | j                  «        | S c c}w )Nzî
        CREATE TABLE IF NOT EXISTS ssh_hosts (
            device TEXT PRIMARY KEY,
            ip TEXT NOT NULL,
            password TEXT,
            username TEXT DEFAULT 'root',
            port INTEGER DEFAULT 22
        )
        zPRAGMA table_info(ssh_hosts)é   Úusernamez=ALTER TABLE ssh_hosts ADD COLUMN username TEXT DEFAULT 'root'Úportz8ALTER TABLE ssh_hosts ADD COLUMN port INTEGER DEFAULT 22)	Úsqlite3ÚconnectÚDB_PATHÚRowÚrow_factoryÚcursorÚexecuteÚfetchallÚcommit)ÚconnÚcurÚrowÚcolss       ú&/var/www/api.ozpay.ru/ozpay/ssh_cmd.pyÚget_connr      s¡   € Ü�?‰?œ7Ó#€DÜ—{‘{€DÔØ
�+‰+‹-€CØ‡K�Kð	ô
ð ‡K�KÐ.Ô/Ø!Ÿl™l›nÖ-�sˆC�‹FÐ-€DÐ-Ø˜ÑØ�‰ÐSÔTØ�TÑØ�‰ÐNÔOØ‡K�K„MØ€Kùò .s   Á3B=c                óz  — | xs dj                  «       } |xs dj                  «       }| st        d«      ‚|st        d«      ‚t        | «      }|dv r"|st        d«      ‚|j                  d«      xs d}|s|xs i j                  d«      xs t        }|dv r|xs i j                  d«      xs t
        }	 t        |«      }t        «       }|j                  «       }|j                  d
| |||xs t        |f«       |j                  «        |j                  «        y # t        t        f$ r}t        d	«      |‚d }~ww xY w)NÚ õ,   Ð˜Ð¼Ñ� Ð´ÐµÐ²Ð°Ð¹Ñ�Ð° Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾u   IP Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÐµÐ½)Nr   u%   ÐŸÐ°Ñ€Ð¾Ð»ÑŒ SSH Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÐµÐ½Úpasswordr   r   u:   ÐŸÐ¾Ñ€Ñ‚ Ñ�ÐµÑ€Ð²ÐµÑ€Ð° Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼a*  
        INSERT INTO ssh_hosts (device, ip, password, username, port)
        VALUES (?, ?, ?, ?, ?)
        ON CONFLICT(device) DO UPDATE SET
            ip = excluded.ip,
            password = excluded.password,
            username = excluded.username,
            port = excluded.port
        )ÚstripÚ
ValueErrorÚget_hostÚgetÚDEFAULT_USERÚDEFAULT_PORTÚintÚ	TypeErrorr   r   r   r   Úclose)	ÚdeviceÚipr   r   r   ÚexistingÚexcr   r   s	            r   Úupsert_hostr-   2   s<  € ð Šl˜×!Ñ!Ó#€FØ
Š(�×	Ñ	Ó	€BÙÜÐGÓHÐHÙÜÐ2Ó3Ð3Ü˜Ó€HØ�:ÑÙÜÐDÓEÐEØ—<‘< 
Ó+Ò1¨rˆÙØ’N ×'Ñ'¨
Ó3ÒC´|ˆØˆzÑØ’˜B×#Ñ# FÓ+Ò;¬|ˆð`Ü�4‹yˆô ‹:€DØ
�+‰+‹-€CØ‡K�Kð	ð 
��X˜xÒ7¬<¸Ð>ôð 	‡K�K„MØ‡J�J…Løô# ”zÐ"ò `ÜÐUÓVÐ\_Ð_ûð`ús   Â5D ÄD:Ä)D5Ä5D:c                ó¸   — t        «       }|j                  «       }|j                  d| f«       |j                  «       }|j	                  «        |sy t        |«      S )Nz(SELECT * FROM ssh_hosts WHERE device = ?)r   r   r   Úfetchoner(   Údict)r)   r   r   r   s       r   r"   r"   ^   sI   € Ü‹:€DØ
�+‰+‹-€CØ‡K�KÐ:¸V¸IÔFØ
�,‰,‹.€CØ‡J�J„LÙØÜ�‹9Ðó    c                 óÔ   — t        «       } | j                  «       }|j                  d«       |j                  «       }| j	                  «        |D �cg c]  }t        |«      ‘Œ c}S c c}w )NzSELECT * FROM ssh_hosts)r   r   r   r   r(   r0   )r   r   ÚrowsÚrs       r   Ú
list_hostsr5   i   sM   € Ü‹:€DØ
�+‰+‹-€CØ‡K�KÐ)Ô*Ø�<‰<‹>€DØ‡J�J„LØ!Ö"˜ŒD��GÒ"Ð"ùÒ"s   ÁA%c                ó¾   — t        «       }|j                  «       }|j                  d| f«       |j                  «        |j                  }|j                  «        |dkD  S )Nz&DELETE FROM ssh_hosts WHERE device = ?r   )r   r   r   r   Úrowcountr(   )r)   r   r   Úchangeds       r   Údelete_hostr9   r   sJ   € Ü‹:€DØ
�+‰+‹-€CØ‡K�KÐ8¸6¸)ÔDØ‡K�K„MØ�l‰l€GØ‡J�J„LØ�Q‰;Ðr1   c                óœ  — | xs dj                  «       } |xs dj                  «       }| r|r| |k(  ryt        «       }|j                  «       }	 |j                  d|| f«       |j	                  «        |j
                  }|j                  «        |dkD  S # t        j                  $ r%}|j                  «        t        d|› d�«      |‚d }~ww xY w)Nr   Fz0UPDATE ssh_hosts SET device = ? WHERE device = ?u   SSH-Ð·Ð°Ð¿Ð¸Ñ�ÑŒ 'u   ' ÑƒÐ¶Ðµ ÐµÑ�Ñ‚ÑŒr   )
r    r   r   r   r   r7   r   ÚIntegrityErrorr(   r!   )ÚoldÚnewr   r   r8   r,   s         r   Úrename_hostr>   |   sÁ   € ØŠ9�"×
Ñ
Ó
€CØŠ9�"×
Ñ
Ó
€CÙ‘c˜S CšZØÜ‹:€DØ
�+‰+‹-€CðOØ�‰ÐFÈÈcÈ
ÔSØ�‰ŒØ—,‘,ˆð 	‡J�J„LØ�Q‰;Ðøô	 ×!Ñ!ò OØ�
‰
ŒÜÐ-¨c¨UÐ2CÐDÓEÈ3ÐNûðOús   Á0B ÂCÂ& CÃCc                ó  — | €g S t        | t        «      r| j                  «       }n	 t        | «      }|D �cg c]5  }t        |«      j                  «       sŒt        |«      j                  «       ‘Œ7 c}S # t        $ r | g}Y ŒOw xY wc c}w )N)Ú
isinstanceÚstrÚ
splitlinesÚlistr'   r    )ÚcommandsÚitemsÚitems      r   Ú_normalize_commandsrG   Ž   sx   € ØÐØˆ	Ü�(œCÔ Ø×#Ñ#Ó%‰ð	Ü˜“NˆEð +0ÖE $´3°t³9·?±?Õ3DŒC�‹I�O‰OÕÒEÐEøô ò 	Ø�JŠEð	üâEs   §A3 ¶BÁBÁ3BÂBc                ó¬  — | xs dj                  «       } | st        d«      ‚t        | «      }|st        d| › d�«      ‚|j	                  d«      xs dj                  «       }|st        d| › d�«      ‚|j	                  d«      xs t
        j                  «       xs t
        }	 t        |j	                  d	«      xs t        «      }|j	                  d
«      xs d}t        j                  «       }|j                  t        j                  «       «       |j                  ||||t        t        t        dd¬«	       |||fS # t        t        f$ r	 t        }Y ŒŽw xY w)Nr   r   u$   SSH-Ñ…Ð¾Ñ�Ñ‚ Ð´Ð»Ñ� Ð´ÐµÐ²Ð°Ð¹Ñ�Ð° 'u#   ' Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ð² ssh_hosts.dbr*   u   Ð£ Ð´ÐµÐ²Ð°Ð¹Ñ�Ð° 'u&   ' Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ IP Ð² ssh_hosts.dbr   r   r   F)	Úhostnamer   r   r   ÚtimeoutÚbanner_timeoutÚauth_timeoutÚallow_agentÚlook_for_keys)r    r!   r"   ÚRuntimeErrorr#   r$   r&   r%   r'   ÚparamikoÚ	SSHClientÚset_missing_host_key_policyÚAutoAddPolicyr   ÚCONNECT_TIMEOUT)Údevice_nameÚhostr*   r   r   r   Úclients          r   Ú_connect_hostrX   ›   sI  € ØÒ$ "×+Ñ+Ó-€KÙÜÐGÓHÐHä�KÓ €DÙÜÐAÀ+ÀÐNqÐrÓsÐsà
�(‰(�4‹.Ò
˜B×	%Ñ	%Ó	'€BÙÜÐ0°°Ð=cÐdÓeÐeà—‘˜Ó$Ò4¬×;Ñ;Ó=ÒMÄ€HðÜ�4—8‘8˜FÓ#Ò3¤|Ó4ˆð �x‰x˜
Ó#Ò) r€Hä×ÑÓ!€FØ
×&Ñ&¤x×'=Ñ'=Ó'?Ô@Ø
‡N�NØØØØÜÜ&Ü$ØØð ô 
ð �2�tÐÐøô# ”zÐ"ò ÜŠðús   Â""D; Ä;EÅEc                óª  — t        j                  dt        j                  |«      › d�«      }d gt        |«      z  }d}|j	                  | «      D ]°  }t        |j                  d«      «      }t        |j                  d«      «      }	| ||j                  «        }
|j                  «       }|
j                  d«      r|
dd  }
|
j                  d«      r|
d d }
d|cxk  rt        |«      k  sŒ›n Œž||   �Œ¤||   |
d|	d	œ||<   Œ² | |d  }d
}t        |«      D ]&  \  }}||   �Œ||r|ndd|r|nd | dœ||<   |sŒ#d}d}Œ( |D �cg c]  }|€Œ|‘Œ	 c}S c c}w )NÚ__OZPAY_z__:(\d+):(\d+)__r   r
   é   ú
éÿÿÿÿr   )ÚcommandÚstdoutÚstderrÚ	exit_codeT)r^   r_   r`   ra   ÚskippedF)ÚreÚcompileÚescapeÚlenÚfinditerr&   ÚgroupÚstartÚendÚ
startswithÚendswithÚ	enumerate)ÚtextÚtokenrD   Ú
shell_exitÚpatternÚresultsÚposÚmatchÚidxÚcodeÚchunkÚtailÚfirst_missingÚir^   rF   s                   r   Ú_parse_session_outputr{   ¿   s  € Ü�j‰j˜H¤R§Y¡Y¨uÓ%5Ð$6Ð6FÐGÓH€GØ%) F¬S°«]Ñ$:€GØ
€CØ×!Ñ! $Ó'ò ˆÜ�%—+‘+˜a“.Ó!ˆÜ�5—;‘;˜q“>Ó"ˆØ�S˜Ÿ™›Ð'ˆØ�i‰i‹kˆØ×Ñ˜DÔ!Ø˜!˜"�IˆEØ�>‰>˜$ÔØ˜#˜2�JˆEØ�Ô#”c˜(“mÖ#¨°©Ñ(<à# C™=ØØØ!ñ	ˆG�CŠLðð  ��ˆ:€DØ€MÜ Ó)ò "‰
ˆˆ7Ø�1‰:Ð!ØàÙ+‘d°ØÙ'4™¸$Ø(Ð(ñ
ˆ�‰
ò ØˆDØ!‰Mð"ð %Ö9�T¨Ñ(8ŠDÒ9Ð9ùÒ9s   ÅEÅ	Ec                óN  — | xs dj                  «       }|sy|j                  d«      rd|v ryd|v ryd|v ryd	|v ry
d|v ryd|v ry|j                  «       dk(  s|j                  «       j                  d«      ry|j                  dd«      d   }t        |«      dkD  r|d d dz   S |S )Nr   zcat zredsocks.confu   Ð·Ð°Ð¿Ð¸Ñ�ÑŒ redsocks.confzentrypoint.shu   Ð·Ð°Ð¿Ð¸Ñ�ÑŒ entrypoint.shzdocker-compose.ymlu   Ð·Ð°Ð¿Ð¸Ñ�ÑŒ docker-compose.ymlÚ
Dockerfileu   Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Dockerfilezredroid.confu&   Ð·Ð°Ð¿Ð¸Ñ�ÑŒ modules-load redroid.confÚOZPAY_DOCKER_PS_STARTu5   docker ps â€” Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð¾Ð²z	docker psz
docker ps r\   r
   r   é    é�   z...)r    rk   Úsplitrf   )r^   rn   Úfirsts      r   Ú_command_previewrƒ   å   sÃ   € ØŠM�r× Ñ Ó"€DÙØØ‡��vÔØ˜dÑ"Ø/Ø˜dÑ"Ø/Ø 4Ñ'Ø4Ø˜4ÑØ,Ø˜TÑ!Ø;Ø" dÑ*ØJØ‡z�zƒ|�{Ò" d§j¡j£l×&=Ñ&=¸lÔ&KØFØ�J‰J�t˜QÓ Ñ"€EÜ
ˆ5ƒz�CÒØ�T�cˆ{˜UÑ"Ð"Ø€Lr1   c                  ó4   — e Zd Zdd„Zdd„Zd	d„Zd
d„Zdd„Zy)Ú_LiveSshPrinterc                óò   — || _         || _        d| _        t        j                  dt        j
                  |«      › d�«      | _        t        j                  dt        j
                  |«      › d�«      | _        y )Nr   z^__OZPAY_START_z__:(\d+)__$z	^__OZPAY_z__:(\d+):(\d+)__$)rD   ÚechoÚbufrc   rd   re   Ústart_reÚend_re)ÚselfrD   ro   r‡   s       r   Ú__init__z_LiveSshPrinter.__init__ÿ   s^   € Ø ˆŒØˆŒ	ØˆŒÜŸ
™
 o´b·i±iÀÓ6FÐ5GÀ{Ð#SÓTˆŒÜ—j‘j I¬b¯i©i¸Ó.>Ð-?Ð?PÐ!QÓRˆ�r1   c                ó–   — |sy | xj                   |j                  dd«      j                  dd«      z  c_         | j                  d«       y )Nz
r\   úF)rˆ   ÚreplaceÚ_drain)r‹   rn   s     r   Úfeedz_LiveSshPrinter.feed  s:   € ÙØØ�Š�D—L‘L ¨Ó.×6Ñ6°t¸TÓBÑB�Ø�‰�EÕr1   c                ó&   — | j                  d«       y ©NT)r�   )r‹   s    r   Úfinishz_LiveSshPrinter.finish  s   € Ø�‰�DÕr1   c                ó  — 	 | j                   j                  d«      }|dk  r1|r.| j                   r"| j                  | j                   «       d| _         y | j                   d | }| j                   |dz   d  | _         | j                  |«       Œ‰)Nr\   r   r   r
   )rˆ   ÚfindÚ_emit)r‹   ÚflushÚnlÚlines       r   r�   z_LiveSshPrinter._drain  sw   € ØØ—‘—‘˜tÓ$ˆBØ�AŠvÙ˜TŸXšXØ—J‘J˜tŸx™xÔ(Ø!�D”HØØ—8‘8˜C˜R�=ˆDØ—x‘x  Q¡ Ð)ˆDŒHØ�J‰J�tÔð r1   c                óØ  — | j                   sy |j                  «       }| j                  j                  |«      }|rft	        |j                  d«      «      }d|cxk  rt        | j                  «      k  rn n| j                  |   nd}t        dt        |«      › �d¬«       y | j                  j                  |«      }|r t        d|j                  d«      › �d¬«       y t        |d¬«       y )	Nr
   r   r   z[ssh] $ T©r˜   z[ssh] exit=r[   )r‡   r    r‰   Ú	fullmatchr&   rh   rf   rD   Úprintrƒ   rŠ   )r‹   rš   Ústrippedri   ru   r^   rj   s          r   r—   z_LiveSshPrinter._emit  s½   € Ø�yŠyØØ—:‘:“<ˆØ—‘×'Ñ'¨Ó1ˆÙÜ�e—k‘k !“nÓ%ˆCØ,-°Ô,I´s¸4¿=¹=Ó7IÕ,I�d—m‘m CÒ(ÈrˆGÜ�HÔ-¨gÓ6Ð7Ð8ÀÕEØØ�k‰k×#Ñ# HÓ-ˆÙÜ�K §	¡	¨!£˜~Ð.°dÕ;ØÜˆd˜$Ör1   N)rD   ú	list[str]ro   rA   r‡   Úbool)rn   rA   ÚreturnÚNone)r¢   r£   )r˜   r¡   r¢   r£   )rš   rA   r¢   r£   )Ú__name__Ú
__module__Ú__qualname__rŒ   r‘   r”   r�   r—   © r1   r   r…   r…   þ   s   „ óSóóó
ô r1   r…   c                ó¤  ‡‡— |r t        j                  «       t        |«      z   nd }g Šd
ˆˆfd„}	 |�@t        j                  «       |kD  r)	 | j                  «        t        dt        |«      › d�«      ‚ || j                  «       | j                  «      } || j                  «       | j                  «      xs |}| j                  «       r®| j                  «       sž| j                  «       sŽ| j                  «       r |d| j                  «      nd  | j                  «       r$ |d| j                  «       | j                  «       rŒ$| j                  «       r$ |d| j                  «       | j                  «       rŒ$n|st        j                  d«       �Œ_dj                  ‰«      j                  dd¬	«      | j                  «       fS # t        $ r Y �Œsw xY w)Nc                óv   •— | sy |d«      }|sy‰j                  |«        ‰|j                  dd¬«      «       y)NFi    úutf-8r�   ©ÚerrorsT)ÚappendÚdecode)ÚreadyÚrecvÚdataÚchunksÚon_datas      €€r   Útakez!_stream_ssh_channel.<locals>.take0  s<   ø€ ÙØÙ�D‹zˆÙØØ�‰�dÔÙ�—‘˜G¨I�Ó6Ô7Ør1   Tu5   SSH-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð¿Ñ€ÐµÐ²Ñ‹Ñ�Ð¸Ð»Ð¸ Ñ‚Ð°Ð¹Ð¼Ð°ÑƒÑ‚ u    Ñ�gš™™™™™©?r1   rª   r�   r«   )r¯   r¡   r¢   r¡   )ÚtimeÚ	monotonicÚfloatr(   Ú	ExceptionÚTimeoutErrorr&   Ú
recv_readyr°   Úrecv_stderr_readyÚrecv_stderrÚexit_status_readyÚsleepÚjoinr®   Úrecv_exit_status)ÚchannelrJ   r³   Údeadliner´   Úgotr²   s     `   @r   Ú_stream_ssh_channelrÄ   ,  s�  ù€ Ù6=”—‘Ó ¤5¨£>Ò1À4€HØ€Föð ØÐ¤D§N¡NÓ$4°xÒ$?ðØ—‘”ô Ð!VÔWZÐ[bÓWcÐVdÐdgÐhÓiÐiÙ�7×%Ñ%Ó'¨¯©Ó6ˆÙ�7×,Ñ,Ó.°×0CÑ0CÓDÒKÈˆØ×$Ñ$Ô&¨w×/AÑ/AÔ/CÈG×LeÑLeÔLgØ(/×(:Ñ(:Ô(<‰D��w—|‘|Ô$À$øØ×$Ñ$Ô&Ù�T˜7Ÿ<™<Ô(ð ×$Ñ$Õ&à×+Ñ+Ô-Ù�T˜7×.Ñ.Ô/ð ×+Ñ+Õ-àÙÜ�J‰J�tÔñ# ð$ �8‰8�FÓ×"Ñ" 7°9Ð"Ó=¸w×?WÑ?WÓ?YÐYÐYøô ò Úðús   ÁG Ç	GÇGc                óR  — | xs dj                  «       } t        |«      }|st        d«      ‚t        j                  «       j
                  }d|dd › �}dg}t        |«      D ]]  \  }}	|j                  d|› d|› d	�«       |j                  |	«       |j                  |› d
�«       |j                  d|› d|› d|› d�«       Œ_ dj                  |«      dz   }
t        |||«      }t        | «      \  }}}|r"t        d| › d|› d|› dt        |«      › �d¬«       	 |j                  d|¬«      \  }}}|j                  |
«       |j                  «        |j                   j#                  «        t%        |j                   ||j&                  «      \  }}|j)                  «        |j+                  «        t-        ||||«      }|r|d   j/                  d«      n|}|rt        d| › d|› d|› d|› �d¬«       |S t        d| › d|› d|› dt        |«      › d|› �
«       |S # |j+                  «        w xY w)u|   Ð’Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð² Ð¾Ð´Ð½Ð¾Ð¹ SSH-Ñ�ÐµÑ�Ñ�Ð¸Ð¸ (Ð¾Ð±Ñ‰Ð¸Ð¹ cwd, Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ, Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ðµ).r   u%   ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ú__ozpay_st_Né   z	exec 2>&1zprintf "\n__OZPAY_START_z__:%s__\n" "ú"z=$?zprintf "\n__OZPAY_z__:%s:%s__\n" "z" "${z}"r\   z[ssh] ú@ú:u    ÐºÐ¾Ð¼Ð°Ð½Ð´=Trœ   z
/bin/sh -s)rJ   r]   ra   u6    Ð³Ð¾Ñ‚Ð¾Ð²Ð¾, Ð¿Ð¾Ñ�Ð»ÐµÐ´Ð½Ñ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° exit=z cmds=z exit=)r    rG   r!   ÚuuidÚuuid4Úhexrm   r­   r¿   r…   rX   rž   rf   Úexec_commandÚwriter˜   rÁ   Úshutdown_writerÄ   r‘   r”   r(   r{   r#   )rU   rD   rJ   r‡   Úcommand_listro   Ú
status_varÚscript_linesÚindexr^   ÚscriptÚprinterrW   r*   r   Ústdinr_   Ú_stderrÚoutrp   rr   Ú	last_codes                         r   Úrun_ssh_commandsrÛ   O  sH  € ð Ò$ "×+Ñ+Ó-€KÜ& xÓ0€LÙÜÐ@ÓAÐAä�J‰J‹L×Ñ€EØ˜u R a˜y˜kÐ*€JØ�=€LÜ# LÓ1ò 
‰ˆˆwØ×ÑÐ7¸°w¸mÈEÈ7ÐRSÐTÔUØ×Ñ˜GÔ$Ø×Ñ˜z˜l¨#Ð.Ô/Ø×ÑØ! % Ð(8¸¸¸vÀjÀ\ÐQTÐUõ	
ð	
ð �Y‰Y�|Ó$ tÑ+€Fä˜l¨E°4Ó8€GÜ$ [Ó1Ñ€FˆB�ÙÜ��{�m 1 R D¨¨$¨¨~¼cÀ,Ó>OÐ=PÐQÐY]Õ^ðØ!'×!4Ñ!4°\È7Ð!4Ó!SÑˆˆv�wØ�‰�FÔØ�‰ŒØ�‰×$Ñ$Ô&Ü-¨f¯n©n¸gÀwÇ|Á|ÓT‰ˆˆZØ�‰Ôà�‰Œä# C¨°¸jÓI€GÙ07�˜‘—‘ Ô,¸Z€IÙÜ��{�m 1 R D¨¨$¨Ð/eÐfoÐepÐqÐy}Õ~ð €Nô 	��{�m 1 R D¨¨$¨¨v´c¸,Ó6GÐ5HÈÈyÈkÐZÔ[Ø€Nøð 	�‰�ús   ÄBH ÈH&c                ó,   — t        | |g||¬«      }|d   S )u—   Ð’Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð¿Ð¾ SSH Ð½Ð° Ñ…Ð¾Ñ�Ñ‚Ðµ Ð´ÐµÐ²Ð°Ð¹Ñ�Ð°.

    Returns:
        dict Ñ� ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸ stdout, stderr, exit_code.
    )rJ   r‡   r   )rÛ   )rU   r^   rJ   r‡   rr   s        r   Úrun_ssh_commandrÝ   ~  s    € ô ˜{¨W¨I¸wÈTÔR€GØ�1‰:Ðr1   Ú__main__é   z$usage: ssh_cmd.py <device> <command>)Úfiler[   r
   ú )NNN)r)   rA   r*   rA   r   úOptional[str]r   râ   r   zOptional[int]r¢   r£   )r)   rA   r¢   zOptional[dict])r¢   ú
list[dict])r)   rA   r¢   r¡   )r<   rA   r=   rA   r¢   r¡   )r¢   r    )rU   rA   r¢   z#tuple[paramiko.SSHClient, str, int])
rn   rA   ro   rA   rD   r    rp   r&   r¢   rã   )r^   rA   r¢   rA   )rJ   úOptional[float]r¢   ztuple[str, int]r“   )rU   rA   rJ   rä   r‡   r¡   r¢   rã   )
rU   rA   r^   rA   rJ   rä   r‡   r¡   r¢   r0   )*Ú__doc__Ú
__future__r   rc   r   Úsysrµ   rË   Úpathlibr   Útypingr   rP   rA   Ú__file__ÚresolveÚparentr   r$   r%   rT   r   r-   r"   r5   r9   r>   rG   rX   r{   rƒ   r…   rÄ   rÛ   rÝ   r¤   rf   Úargvrž   r`   Úexitr¿   r§   r1   r   ú<module>rï      s²  ðñõ #ã 	Û Û 
Û Û Ý Ý ã á
‰d�8‹n×$Ñ$Ó&×-Ñ-°Ñ>Ó
?€Ø€Ø€Ø€òð8 #Ø"Øð)Øð)àð)ð ð)ð ð	)ð
 ð)ð 
ó)óXó#óóó$
Fó!óH#:óL÷2+ ñ + ó\ ZðL  $Øð	,Øð,ð ð,ð ð	,ð
 ó,ðd  $Øð	Øðàðð ðð ð	ð
 
óð ˆzÒÙ
ˆ3�8‰8ƒ}�qÒÙÐ4¸3¿:¹:ÕFØˆ�‰�ŒÙ�C—H‘H˜Q‘K §¡¨#¯(©(°1°2¨,Ó!7Õ8ð	 r1   