ark-sdk-python 2.0.4__py3-none-any.whl → 2.0.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ark_sdk_python/ark.py +1 -1
- ark_sdk_python/common/connections/ssh/ark_pty_ssh_connection.py +1 -0
- ark_sdk_python/common/connections/ssh/ark_pty_ssh_win_connection.py +235 -0
- ark_sdk_python/examples/validate_ssh_connection.py +31 -14
- {ark_sdk_python-2.0.4.dist-info → ark_sdk_python-2.0.5.dist-info}/METADATA +3 -2
- {ark_sdk_python-2.0.4.dist-info → ark_sdk_python-2.0.5.dist-info}/RECORD +10 -9
- {ark_sdk_python-2.0.4.dist-info → ark_sdk_python-2.0.5.dist-info}/LICENSE.txt +0 -0
- {ark_sdk_python-2.0.4.dist-info → ark_sdk_python-2.0.5.dist-info}/NOTICES.md +0 -0
- {ark_sdk_python-2.0.4.dist-info → ark_sdk_python-2.0.5.dist-info}/WHEEL +0 -0
- {ark_sdk_python-2.0.4.dist-info → ark_sdk_python-2.0.5.dist-info}/entry_points.txt +0 -0
ark_sdk_python/ark.py
CHANGED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import subprocess
|
|
4
|
+
import threading
|
|
5
|
+
import time
|
|
6
|
+
from shutil import which
|
|
7
|
+
from typing import Any, Final, Optional
|
|
8
|
+
|
|
9
|
+
from overrides import overrides
|
|
10
|
+
|
|
11
|
+
from ark_sdk_python.common.connections.ark_connection import ArkConnection
|
|
12
|
+
from ark_sdk_python.common.connections.ssh.ark_ssh_connection import SSH_PORT
|
|
13
|
+
from ark_sdk_python.models import ArkException
|
|
14
|
+
from ark_sdk_python.models.common.connections import ArkConnectionCommand, ArkConnectionDetails, ArkConnectionResult
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ArkPTYSSHWinConnection(ArkConnection):
|
|
18
|
+
__ANSI_COLOR_STRIPPER: Final[Any] = re.compile(r'\x1b[^m]*m|\x1b\[\?2004[hl]')
|
|
19
|
+
__ANSI_ESCAPE_STRIPPER: Final[Any] = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
|
|
20
|
+
__PROMPT_REGEX: Final[Any] = re.compile(r"[#$]")
|
|
21
|
+
__PASSWORD_PROMPT_REGEX: Final[Any] = re.compile(
|
|
22
|
+
r"(?i)(?:password:)|(?:passphrase for key)|(?:^Please enter your password[\s\S]+.+ >:$)"
|
|
23
|
+
)
|
|
24
|
+
__EXIT_MAKRER: Final[str] = '__ARK_RC_MARK__'
|
|
25
|
+
__DEFAULT_COL_SIZE: Final[int] = 80
|
|
26
|
+
__DEFAULT_ROW_SIZE: Final[int] = 24
|
|
27
|
+
__DEFAULT_NONEAGER_TIMEOEUT: Final[float] = 1.0
|
|
28
|
+
__DEFAULT_PROMPT_OVERALL_TIMEOUT: Final[float] = 20.0
|
|
29
|
+
__CHAR_SLEEP_TIME: Final[float] = 0.05
|
|
30
|
+
|
|
31
|
+
def __init__(self):
|
|
32
|
+
super().__init__()
|
|
33
|
+
self.__is_connected: bool = False
|
|
34
|
+
self.__is_suspended: bool = False
|
|
35
|
+
self.__pty: Optional[Any] = None
|
|
36
|
+
self.__output_lock: threading.Lock = threading.Lock()
|
|
37
|
+
self.__buffer: str = ''
|
|
38
|
+
|
|
39
|
+
def __strip_ansi(self, ansi_input: str) -> str:
|
|
40
|
+
ansi_input = ansi_input.strip()
|
|
41
|
+
ansi_input = ArkPTYSSHWinConnection.__ANSI_COLOR_STRIPPER.sub('', ansi_input)
|
|
42
|
+
ansi_input = ArkPTYSSHWinConnection.__ANSI_ESCAPE_STRIPPER.sub('', ansi_input)
|
|
43
|
+
return ansi_input
|
|
44
|
+
|
|
45
|
+
def __reset_buffer(self) -> None:
|
|
46
|
+
with self.__output_lock:
|
|
47
|
+
self.__buffer = ''
|
|
48
|
+
|
|
49
|
+
def __read_until_latest_prompt(
|
|
50
|
+
self,
|
|
51
|
+
password: Optional[str] = None,
|
|
52
|
+
noneager_timeout: float = __DEFAULT_NONEAGER_TIMEOEUT,
|
|
53
|
+
overall_timeout: float = __DEFAULT_PROMPT_OVERALL_TIMEOUT,
|
|
54
|
+
login_prompt: bool = False,
|
|
55
|
+
expected_prompt: Any = __PROMPT_REGEX,
|
|
56
|
+
) -> None:
|
|
57
|
+
buffer = ''
|
|
58
|
+
prompt_found_at = -1
|
|
59
|
+
start_time = time.time()
|
|
60
|
+
noneager_start_time = start_time
|
|
61
|
+
|
|
62
|
+
while True:
|
|
63
|
+
char = self.__pty.read(1)
|
|
64
|
+
if not char:
|
|
65
|
+
if ArkPTYSSHWinConnection.__PASSWORD_PROMPT_REGEX.search(self.__strip_ansi(buffer)) and not password and login_prompt:
|
|
66
|
+
raise RuntimeError(f'Password prompt with no password given [{buffer}]')
|
|
67
|
+
if (time.time() - noneager_start_time > noneager_timeout) and prompt_found_at != -1:
|
|
68
|
+
break
|
|
69
|
+
if (time.time() - start_time) > overall_timeout and prompt_found_at == -1:
|
|
70
|
+
raise RuntimeError(f'Timeout while waiting for prompt [{buffer}]')
|
|
71
|
+
time.sleep(ArkPTYSSHWinConnection.__CHAR_SLEEP_TIME)
|
|
72
|
+
continue
|
|
73
|
+
|
|
74
|
+
buffer += char
|
|
75
|
+
|
|
76
|
+
with self.__output_lock:
|
|
77
|
+
self.__buffer += char
|
|
78
|
+
|
|
79
|
+
if ArkPTYSSHWinConnection.__PASSWORD_PROMPT_REGEX.search(self.__strip_ansi(buffer)) and login_prompt:
|
|
80
|
+
if not password:
|
|
81
|
+
raise RuntimeError(f'Password prompt with no password given [{buffer}]')
|
|
82
|
+
self.__pty.write(password + '\n')
|
|
83
|
+
buffer = ""
|
|
84
|
+
prompt_found_at = -1
|
|
85
|
+
continue
|
|
86
|
+
|
|
87
|
+
if expected_prompt.search(buffer):
|
|
88
|
+
prompt_found_at = len(buffer)
|
|
89
|
+
|
|
90
|
+
noneager_start_time = time.time()
|
|
91
|
+
|
|
92
|
+
if prompt_found_at != -1:
|
|
93
|
+
with self.__output_lock:
|
|
94
|
+
self.__buffer = buffer
|
|
95
|
+
|
|
96
|
+
@overrides
|
|
97
|
+
def connect(self, connection_details: ArkConnectionDetails) -> None:
|
|
98
|
+
"""
|
|
99
|
+
Performs SSH connection with given details or keys
|
|
100
|
+
Saves the ssh session to be used for command executions
|
|
101
|
+
Done using windows pty
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
connection_details (ArkConnectionDetails): _description_
|
|
105
|
+
|
|
106
|
+
Raises:
|
|
107
|
+
ArkException: _description_
|
|
108
|
+
"""
|
|
109
|
+
# pylint: disable=import-error
|
|
110
|
+
import winpty
|
|
111
|
+
|
|
112
|
+
if self.__is_connected:
|
|
113
|
+
return
|
|
114
|
+
|
|
115
|
+
address = connection_details.address
|
|
116
|
+
user = connection_details.credentials.user
|
|
117
|
+
port = connection_details.port or SSH_PORT
|
|
118
|
+
password = None
|
|
119
|
+
key_path = None
|
|
120
|
+
if connection_details.credentials.password:
|
|
121
|
+
password = connection_details.credentials.password.get_secret_value()
|
|
122
|
+
elif connection_details.credentials.private_key_filepath:
|
|
123
|
+
key_path = connection_details.credentials.private_key_filepath
|
|
124
|
+
|
|
125
|
+
ssh_args = [f'{user}@{address}', '-p', str(port), '-o', 'StrictHostKeyChecking=no']
|
|
126
|
+
if key_path:
|
|
127
|
+
ssh_args.extend(['-i', str(key_path)])
|
|
128
|
+
try:
|
|
129
|
+
self.__pty = winpty.PTY(
|
|
130
|
+
cols=ArkPTYSSHWinConnection.__DEFAULT_COL_SIZE,
|
|
131
|
+
rows=ArkPTYSSHWinConnection.__DEFAULT_ROW_SIZE,
|
|
132
|
+
backend=winpty.enums.Backend.WinPTY,
|
|
133
|
+
)
|
|
134
|
+
ssh_full_cmd = which('ssh', path=os.environ.get('PATH', os.defpath))
|
|
135
|
+
self.__pty.spawn(ssh_full_cmd, cmdline=' ' + subprocess.list2cmdline(ssh_args))
|
|
136
|
+
self.__read_until_latest_prompt(password, login_prompt=True)
|
|
137
|
+
self.__is_connected = True
|
|
138
|
+
except Exception as ex:
|
|
139
|
+
raise ArkException(f'Failed to ssh connect [{str(ex)}]') from ex
|
|
140
|
+
|
|
141
|
+
@overrides
|
|
142
|
+
def disconnect(self) -> None:
|
|
143
|
+
"""
|
|
144
|
+
Disconnects the ssh session
|
|
145
|
+
"""
|
|
146
|
+
if self.__pty:
|
|
147
|
+
self.__pty.write('exit\n')
|
|
148
|
+
self.__pty = None
|
|
149
|
+
self.__is_connected = False
|
|
150
|
+
self.__is_suspended = False
|
|
151
|
+
|
|
152
|
+
@overrides
|
|
153
|
+
def suspend_connection(self) -> None:
|
|
154
|
+
"""
|
|
155
|
+
Suspends execution of ssh commands
|
|
156
|
+
"""
|
|
157
|
+
self.__is_suspended = True
|
|
158
|
+
|
|
159
|
+
@overrides
|
|
160
|
+
def restore_connection(self) -> None:
|
|
161
|
+
"""
|
|
162
|
+
Restores execution of ssh commands
|
|
163
|
+
"""
|
|
164
|
+
self.__is_suspended = False
|
|
165
|
+
|
|
166
|
+
@overrides
|
|
167
|
+
def is_suspended(self) -> bool:
|
|
168
|
+
"""
|
|
169
|
+
Checks whether ssh commands can be executed or not
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
bool: _description_
|
|
173
|
+
"""
|
|
174
|
+
return self.__is_suspended
|
|
175
|
+
|
|
176
|
+
@overrides
|
|
177
|
+
def is_connected(self) -> bool:
|
|
178
|
+
"""
|
|
179
|
+
Checks whether theres a ssh session connected
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
bool: _description_
|
|
183
|
+
"""
|
|
184
|
+
return self.__is_connected
|
|
185
|
+
|
|
186
|
+
@overrides
|
|
187
|
+
def run_command(self, command: ArkConnectionCommand) -> ArkConnectionResult:
|
|
188
|
+
"""
|
|
189
|
+
Runs a command over ssh session via pty, returning the result accordingly
|
|
190
|
+
stderr is not supported, only stdout is returned, and it'll contain everything including stderr
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
command (ArkConnectionCommand): _description_
|
|
194
|
+
|
|
195
|
+
Raises:
|
|
196
|
+
ArkException: _description_
|
|
197
|
+
|
|
198
|
+
Returns:
|
|
199
|
+
ArkConnectionResult: _description_
|
|
200
|
+
"""
|
|
201
|
+
if not self.__is_connected or self.__is_suspended:
|
|
202
|
+
raise ArkException('Cannot run command while not connected or suspended')
|
|
203
|
+
|
|
204
|
+
self._logger.debug(f'Running command [{command.command}]')
|
|
205
|
+
|
|
206
|
+
self.__reset_buffer()
|
|
207
|
+
self.__pty.write(command.command + "\n")
|
|
208
|
+
self.__read_until_latest_prompt()
|
|
209
|
+
|
|
210
|
+
with self.__output_lock:
|
|
211
|
+
stdout = self.__buffer.strip()
|
|
212
|
+
|
|
213
|
+
self.__reset_buffer()
|
|
214
|
+
self.__pty.write(f'echo {ArkPTYSSHWinConnection.__EXIT_MAKRER}_$?;\n')
|
|
215
|
+
self.__read_until_latest_prompt()
|
|
216
|
+
|
|
217
|
+
with self.__output_lock:
|
|
218
|
+
lines = self.__buffer.strip().splitlines()
|
|
219
|
+
|
|
220
|
+
rc = None
|
|
221
|
+
for line in lines:
|
|
222
|
+
line = self.__strip_ansi(line)
|
|
223
|
+
if line.startswith(f'{ArkPTYSSHWinConnection.__EXIT_MAKRER}_'):
|
|
224
|
+
try:
|
|
225
|
+
rc = int(line[len(ArkPTYSSHWinConnection.__EXIT_MAKRER) + 1 :]) # +1 for the underscore
|
|
226
|
+
break
|
|
227
|
+
except ValueError:
|
|
228
|
+
continue
|
|
229
|
+
if rc is None:
|
|
230
|
+
raise ArkException(f"Failed to parse exit code from output - [{self.__buffer}]")
|
|
231
|
+
if rc != command.expected_rc and command.raise_on_error:
|
|
232
|
+
raise ArkException(f'Failed to execute command [{command.command}] - [{rc}] - [{stdout}]')
|
|
233
|
+
self._logger.debug(f'Command rc: [{rc}]')
|
|
234
|
+
self._logger.debug(f'Command stdout: [{stdout}]')
|
|
235
|
+
return ArkConnectionResult(stdout=stdout, rc=rc)
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import argparse
|
|
2
|
+
import platform
|
|
2
3
|
import tempfile
|
|
3
4
|
|
|
4
5
|
from ark_sdk_python.auth import ArkISPAuth
|
|
5
6
|
from ark_sdk_python.common.ark_jwt_utils import ArkJWTUtils
|
|
6
7
|
from ark_sdk_python.common.connections.ssh.ark_pty_ssh_connection import ArkPTYSSHConnection
|
|
8
|
+
from ark_sdk_python.common.connections.ssh.ark_pty_ssh_win_connection import ArkPTYSSHWinConnection
|
|
7
9
|
from ark_sdk_python.models.auth import ArkAuthMethod, ArkAuthProfile, ArkSecret
|
|
8
|
-
from ark_sdk_python.models.auth.ark_auth_method import
|
|
10
|
+
from ark_sdk_python.models.auth.ark_auth_method import (
|
|
11
|
+
ArkAuthMethodsDescriptionMap,
|
|
12
|
+
IdentityArkAuthMethodSettings,
|
|
13
|
+
IdentityServiceUserArkAuthMethodSettings,
|
|
14
|
+
)
|
|
9
15
|
from ark_sdk_python.models.common.connections.ark_connection_command import ArkConnectionCommand
|
|
10
16
|
from ark_sdk_python.models.common.connections.ark_connection_credentials import ArkConnectionCredentials
|
|
11
17
|
from ark_sdk_python.models.common.connections.ark_connection_details import ArkConnectionDetails
|
|
@@ -13,29 +19,36 @@ from ark_sdk_python.models.services.sia.sso.ark_sia_sso_get_ssh_key import ArkSI
|
|
|
13
19
|
from ark_sdk_python.services.sia.sso import ArkSIASSOService
|
|
14
20
|
|
|
15
21
|
|
|
16
|
-
def login_to_identity_security_platform(
|
|
22
|
+
def login_to_identity_security_platform(user: str, secret: str, is_service_user: bool, application_name: str) -> ArkISPAuth:
|
|
17
23
|
"""
|
|
18
|
-
This will perform login to the tenant with the given
|
|
24
|
+
This will perform login to the tenant with the given user credentials
|
|
25
|
+
Where the user is normal or service user based on the boolean
|
|
19
26
|
Caching the logged in token is disabled and will perform a full login on each call
|
|
20
27
|
Will return an identity security platform authenticated class
|
|
21
28
|
|
|
22
29
|
Args:
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
user (str): _description_
|
|
31
|
+
secret (str): _description_
|
|
25
32
|
application_name (str): _description_
|
|
26
33
|
|
|
27
34
|
Returns:
|
|
28
35
|
ArkISPAuth: _description_
|
|
29
36
|
"""
|
|
30
|
-
print('Logging in to the tenant')
|
|
31
37
|
isp_auth = ArkISPAuth(cache_authentication=False)
|
|
38
|
+
auth_method = ArkAuthMethod.IdentityServiceUser if is_service_user else ArkAuthMethod.Identity
|
|
39
|
+
auth_methods_settings = (
|
|
40
|
+
IdentityServiceUserArkAuthMethodSettings(identity_authorization_application=application_name)
|
|
41
|
+
if is_service_user
|
|
42
|
+
else IdentityArkAuthMethodSettings()
|
|
43
|
+
)
|
|
44
|
+
print(f'Logging in to the tenant with [{ArkAuthMethodsDescriptionMap[auth_method]}] user type and user [{user}]')
|
|
32
45
|
isp_auth.authenticate(
|
|
33
46
|
auth_profile=ArkAuthProfile(
|
|
34
|
-
username=
|
|
35
|
-
auth_method=
|
|
36
|
-
auth_method_settings=
|
|
47
|
+
username=user,
|
|
48
|
+
auth_method=auth_method,
|
|
49
|
+
auth_method_settings=auth_methods_settings,
|
|
37
50
|
),
|
|
38
|
-
secret=ArkSecret(secret=
|
|
51
|
+
secret=ArkSecret(secret=secret),
|
|
39
52
|
)
|
|
40
53
|
print('Logged in successfully')
|
|
41
54
|
return isp_auth
|
|
@@ -92,7 +105,10 @@ def connect_and_validate_connection(ssh_key_path: str, proxy_address: str, conne
|
|
|
92
105
|
command (str): _description_
|
|
93
106
|
"""
|
|
94
107
|
print(f'Connecting to proxy [{proxy_address}] and connection string [{connection_string}]')
|
|
95
|
-
|
|
108
|
+
if platform.system() == 'Windows':
|
|
109
|
+
ssh_connection = ArkPTYSSHWinConnection()
|
|
110
|
+
else:
|
|
111
|
+
ssh_connection = ArkPTYSSHConnection()
|
|
96
112
|
ssh_connection.connect(
|
|
97
113
|
ArkConnectionDetails(
|
|
98
114
|
address=proxy_address,
|
|
@@ -112,8 +128,9 @@ def connect_and_validate_connection(ssh_key_path: str, proxy_address: str, conne
|
|
|
112
128
|
if __name__ == '__main__':
|
|
113
129
|
# Construct an argument parser for CLI parameters for the script
|
|
114
130
|
parser = argparse.ArgumentParser()
|
|
115
|
-
parser.add_argument('--
|
|
116
|
-
parser.add_argument('--
|
|
131
|
+
parser.add_argument('--user', required=True, help='User to login and perform the operation with')
|
|
132
|
+
parser.add_argument('--secret', required=True, help='User secret to use for logging in and connecting')
|
|
133
|
+
parser.add_argument('--is-service-user', action='store_true', help='Whether this user is a service user and not a normal user')
|
|
117
134
|
parser.add_argument(
|
|
118
135
|
'--service-application',
|
|
119
136
|
default='__idaptive_cybr_user_oidc',
|
|
@@ -139,7 +156,7 @@ if __name__ == '__main__':
|
|
|
139
156
|
# - Generate an MFA Caching SSH key
|
|
140
157
|
# - Construct the ssh proxy address
|
|
141
158
|
# - Connect in SSH to the proxy / target with the MFA Caching SSH Key and perform the command
|
|
142
|
-
isp_auth = login_to_identity_security_platform(args.
|
|
159
|
+
isp_auth = login_to_identity_security_platform(args.user, args.secret, args.is_service_user, args.service_application)
|
|
143
160
|
ssh_key_path = generate_mfa_caching_ssh_key(isp_auth, temp_folder)
|
|
144
161
|
proxy_address = construct_ssh_proxy_address(isp_auth)
|
|
145
162
|
connect_and_validate_connection(ssh_key_path, proxy_address, args.connection_string, args.test_command)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: ark-sdk-python
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.5
|
|
4
4
|
Summary: Official Ark SDK / CLI for CyberArk Identity Security Platform
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Author: CyberArk
|
|
@@ -29,13 +29,14 @@ Requires-Dist: keyrings.cryptfile
|
|
|
29
29
|
Requires-Dist: overrides
|
|
30
30
|
Requires-Dist: packaging
|
|
31
31
|
Requires-Dist: paramiko
|
|
32
|
-
Requires-Dist: pexpect
|
|
32
|
+
Requires-Dist: pexpect ; sys_platform != "win32"
|
|
33
33
|
Requires-Dist: progress
|
|
34
34
|
Requires-Dist: pycryptodome
|
|
35
35
|
Requires-Dist: pydantic (==2.*)
|
|
36
36
|
Requires-Dist: pyhumps
|
|
37
37
|
Requires-Dist: pyjwt
|
|
38
38
|
Requires-Dist: python-dateutil
|
|
39
|
+
Requires-Dist: pywinpty ; sys_platform == "win32"
|
|
39
40
|
Requires-Dist: pywinrm
|
|
40
41
|
Requires-Dist: pyyaml
|
|
41
42
|
Requires-Dist: requests
|
|
@@ -10,7 +10,7 @@ ark_sdk_python/actions/ark_service_exec_action.py,sha256=IHIm9oISRThOD8WNJe4oJX-
|
|
|
10
10
|
ark_sdk_python/args/__init__.py,sha256=mCb4UrIRL4u58QyUbqqH2xAU0VN91pxjK5sa_UwCM_k,279
|
|
11
11
|
ark_sdk_python/args/ark_args_formatter.py,sha256=-Rs_rGMIr1bprD1SfYlMsLoSOFgr_RFrRdREvbmPU6k,9204
|
|
12
12
|
ark_sdk_python/args/ark_pydantic_argparse.py,sha256=uupNLnUmO5LrTrRZsBv7qRKgDsx4GaJMwOUh1TCc1-w,40083
|
|
13
|
-
ark_sdk_python/ark.py,sha256=
|
|
13
|
+
ark_sdk_python/ark.py,sha256=xWOv-IjEvmYh_rl41EYWAOllXjbAk1wLUtpzgR9SLVI,1280
|
|
14
14
|
ark_sdk_python/ark_api.py,sha256=qEB2j-xf8kiSdAvTXrvEdqGDQ-l1aoEvktxnq7BYNRI,12486
|
|
15
15
|
ark_sdk_python/auth/__init__.py,sha256=1l29Rf3VhwmV8z3YROiQVcgrZYSeeCqVN4zna77tnlk,620
|
|
16
16
|
ark_sdk_python/auth/ark_auth.py,sha256=2fPlABM3AwWmb1h0lQPQAz93u1ZluYKv7axlfg4lq5Q,12988
|
|
@@ -43,7 +43,8 @@ ark_sdk_python/common/ark_system_config.py,sha256=cl44cYSgXZEnoRYu048aBeJwWRPdCT
|
|
|
43
43
|
ark_sdk_python/common/connections/__init__.py,sha256=RyARha6jTeaUw1cIGBSR7nOYxCV3fC24juKb-17yXLw,104
|
|
44
44
|
ark_sdk_python/common/connections/ark_connection.py,sha256=wjYpn_9EJ-B679006VqQREFeTOhINmw-heiRqlpuCnY,1613
|
|
45
45
|
ark_sdk_python/common/connections/ssh/__init__.py,sha256=Ycv3BDI2iw-N7BdRkpAv2Qi90O4bp8sPyNsJnuQLfWo,256
|
|
46
|
-
ark_sdk_python/common/connections/ssh/ark_pty_ssh_connection.py,sha256=
|
|
46
|
+
ark_sdk_python/common/connections/ssh/ark_pty_ssh_connection.py,sha256=mhrVYV9vx81lSRXCcPoV3KjxKvMDEZlHEROOB1mynLs,5013
|
|
47
|
+
ark_sdk_python/common/connections/ssh/ark_pty_ssh_win_connection.py,sha256=vAAvJ7AMML66B4GVjsSeqzPlJVrrNK2M34TqeVDYg2k,8557
|
|
47
48
|
ark_sdk_python/common/connections/ssh/ark_ssh_connection.py,sha256=yVtrM_clLScg1uNY-Fextiup59h2AIbKxQQadLfiqpw,5195
|
|
48
49
|
ark_sdk_python/common/connections/winrm/__init__.py,sha256=TX8jEK5BPwvlzgo8lH4sGDcY9oL593rdEutQL4MMra4,164
|
|
49
50
|
ark_sdk_python/common/connections/winrm/ark_winrm_connection.py,sha256=O8ifpvmuzFpvqvjb3wFmg576v5jFZwFHi20wlV2UtwE,6854
|
|
@@ -57,7 +58,7 @@ ark_sdk_python/examples/create_sia_vm_environment.py,sha256=omk2mb1yrAU8w3mNSqjH
|
|
|
57
58
|
ark_sdk_python/examples/default_suffix.py,sha256=GEAnsrVhNdsIZ2YRJd4Xs4HYv86UdmXwPwOs7ajcQIQ,662
|
|
58
59
|
ark_sdk_python/examples/list_pcloud_accounts.py,sha256=Xzq_LIp_woRgCt73w1AMlXbB6P8yNRHr1VGIBCyQswk,810
|
|
59
60
|
ark_sdk_python/examples/session_monitoring_activites.py,sha256=WSGISA4Qye8q22WpiHq0HKYTfbwLK7038mRHp2Kr9IQ,1632
|
|
60
|
-
ark_sdk_python/examples/validate_ssh_connection.py,sha256=
|
|
61
|
+
ark_sdk_python/examples/validate_ssh_connection.py,sha256=K9RB8eosbV-5m0Q-gx9YQWrp57D8oLB4jfCgQy44gdU,7094
|
|
61
62
|
ark_sdk_python/models/__init__.py,sha256=2EKDAGANDadQfJrnTjm2Jc7JnINcZOwCRXWHEXmIH6o,1082
|
|
62
63
|
ark_sdk_python/models/actions/__init__.py,sha256=2xPZhoHco50bmPX7rm6uPOAcYURoTP9J5KF4E3XNaFA,743
|
|
63
64
|
ark_sdk_python/models/actions/ark_configure_action_consts.py,sha256=-YNgiGv1GsQx-JvO0eXXrrOlDcH6sRDLdO7kvTHto-M,1143
|
|
@@ -479,9 +480,9 @@ ark_sdk_python/services/sia/workspaces/targetsets/__init__.py,sha256=UjHr81LMcMl
|
|
|
479
480
|
ark_sdk_python/services/sia/workspaces/targetsets/ark_sia_target_sets_workspace_service.py,sha256=o9_DzskTV94kkfc4m0Qk8lj5FV8rexRa5RzRwfe9Tbo,11254
|
|
480
481
|
ark_sdk_python/services/sm/__init__.py,sha256=jzKxEkZYOCW9y_byLfd_odae9m2sh1UfjaaKBVySWY0,95
|
|
481
482
|
ark_sdk_python/services/sm/ark_sm_service.py,sha256=Rh2dFjNz7VMJUnl43hxL07HEZ8_33KrU_lqfUrqUDn4,11517
|
|
482
|
-
ark_sdk_python-2.0.
|
|
483
|
-
ark_sdk_python-2.0.
|
|
484
|
-
ark_sdk_python-2.0.
|
|
485
|
-
ark_sdk_python-2.0.
|
|
486
|
-
ark_sdk_python-2.0.
|
|
487
|
-
ark_sdk_python-2.0.
|
|
483
|
+
ark_sdk_python-2.0.5.dist-info/LICENSE.txt,sha256=d4EzYx2apA3-GqrFY23wLtc6UmQNXG05gyLfZ3oWVRs,11358
|
|
484
|
+
ark_sdk_python-2.0.5.dist-info/METADATA,sha256=Q03rx4A9NT-nI4hG54LBs_9db9vRG-FArJvIAD6DTuw,20178
|
|
485
|
+
ark_sdk_python-2.0.5.dist-info/NOTICES.md,sha256=cuG6J8u9QVu5ZjYki-McJmoEmi39foN30IxA_2fNnKY,125667
|
|
486
|
+
ark_sdk_python-2.0.5.dist-info/WHEEL,sha256=QymApwX2NnTrOAORdnrvo1YegSC1EN2pJY0mOd9rfdE,110
|
|
487
|
+
ark_sdk_python-2.0.5.dist-info/entry_points.txt,sha256=v5bcuRn8w42ZKQspfvX3AliKmLVO6f7Zb_bma77p3vQ,47
|
|
488
|
+
ark_sdk_python-2.0.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|