codecraftai-protocol-ssh 1.3.0__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.
- ccai/protocols/ssh/__init__.py +3 -0
- ccai/protocols/ssh/py.typed +0 -0
- ccai/protocols/ssh/sshagent.py +375 -0
- ccai/protocols/ssh/sshauth.py +118 -0
- ccai/protocols/ssh/sshbase.py +780 -0
- ccai/protocols/ssh/sshclient.py +170 -0
- ccai/protocols/ssh/sshconnection.py +1285 -0
- ccai/protocols/ssh/sshconst.py +49 -0
- ccai/protocols/ssh/sshconstants.py +185 -0
- ccai/protocols/ssh/sshhelpers.py +695 -0
- ccai/protocols/ssh/sshkeys.py +197 -0
- ccai/protocols/ssh/sshpacket.py +138 -0
- ccai/protocols/ssh/sshsession.py +433 -0
- ccai/protocols/ssh/sshsftp.py +297 -0
- ccai/protocols/ssh/sshtransport.py +756 -0
- ccai/protocols/ssh/sshtunnel.py +464 -0
- codecraftai_protocol_ssh-1.3.0.dist-info/METADATA +98 -0
- codecraftai_protocol_ssh-1.3.0.dist-info/RECORD +20 -0
- codecraftai_protocol_ssh-1.3.0.dist-info/WHEEL +4 -0
- codecraftai_protocol_ssh-1.3.0.dist-info/licenses/LICENSE.md +204 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""
|
|
2
|
+
.. module:: sshconst
|
|
3
|
+
:platform: Darwin, Linux, Unix, Windows
|
|
4
|
+
:synopsis: Module containing ssh constants
|
|
5
|
+
|
|
6
|
+
.. moduleauthor:: Myron Walker <myron.walker@gmail.com>
|
|
7
|
+
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__author__ = "Myron Walker"
|
|
11
|
+
__copyright__ = "Copyright 2025, Code Craft AI LLC"
|
|
12
|
+
__credits__ = []
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
import dataclasses
|
|
16
|
+
import os
|
|
17
|
+
import re
|
|
18
|
+
|
|
19
|
+
from ccai.credentials.sshcredential import SshCredential
|
|
20
|
+
|
|
21
|
+
DEFAULT_SSH_TIMEOUT = 300
|
|
22
|
+
DEFAULT_SSH_RETRY_INTERVAL = .5
|
|
23
|
+
|
|
24
|
+
DEFAULT_FAILURE_LABEL = "Failure"
|
|
25
|
+
DEFAULT_SUCCESS_LABEL = "Success"
|
|
26
|
+
|
|
27
|
+
INTERACTIVE_PROMPT="PROMPT%:%:%"
|
|
28
|
+
INTERACTIVE_PROMPT_BYTES = INTERACTIVE_PROMPT.encode('utf-8')
|
|
29
|
+
|
|
30
|
+
TEMPLATE_COMMAND_FAILURE = "RUNCMD%s: " + DEFAULT_FAILURE_LABEL + " running CMD=%s" + os.linesep + "STDOUT:" + os.linesep + "%s" + os.linesep + "STDERR:" + os.linesep + "%s"
|
|
31
|
+
TEMPLATE_COMMAND_SUCCESS = "RUNCMD%s: " + DEFAULT_SUCCESS_LABEL + " running CMD=%s" + os.linesep + "STDOUT:" + os.linesep + "%s" + os.linesep + "STDERR:" + os.linesep + "%s"
|
|
32
|
+
|
|
33
|
+
# PERMS LINKS OWNER GROUPS SIZE MONTH DAY TIME NAME
|
|
34
|
+
# rwxrwxrwx 24 myron myron 4096 Jul 4 00:37 PCBs
|
|
35
|
+
REGEX_DIRECTORY_ENTRY = re.compile(r"([\S]+)\s+([0-9]+)\s+([\S]+)\s+([\S]+)\s+([0-9]+)\s+([A-Za-z]+\s+[0-9]+\s+(?:[0-9:]+|[0-9]+))\s+(.+)")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclasses.dataclass
|
|
39
|
+
class SshJumpParams:
|
|
40
|
+
"""
|
|
41
|
+
Parameters describing an SSH jump host used for tunneling.
|
|
42
|
+
|
|
43
|
+
:param host: Hostname or IP address of the jump server.
|
|
44
|
+
:param credential: Credential used when connecting to the jump host.
|
|
45
|
+
:param port: Port number of the SSH service.
|
|
46
|
+
"""
|
|
47
|
+
host: str
|
|
48
|
+
credential: SshCredential
|
|
49
|
+
port: int = 22
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SSH Protocol Constants
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
# SSH Message Numbers
|
|
6
|
+
SSH_MSG_DISCONNECT = 1
|
|
7
|
+
SSH_MSG_IGNORE = 2
|
|
8
|
+
SSH_MSG_UNIMPLEMENTED = 3
|
|
9
|
+
SSH_MSG_DEBUG = 4
|
|
10
|
+
SSH_MSG_SERVICE_REQUEST = 5
|
|
11
|
+
SSH_MSG_SERVICE_ACCEPT = 6
|
|
12
|
+
|
|
13
|
+
# Key Exchange
|
|
14
|
+
SSH_MSG_KEXINIT = 20
|
|
15
|
+
SSH_MSG_NEWKEYS = 21
|
|
16
|
+
|
|
17
|
+
# Diffie-Hellman Key Exchange
|
|
18
|
+
SSH_MSG_KEXDH_INIT = 30
|
|
19
|
+
SSH_MSG_KEXDH_REPLY = 31
|
|
20
|
+
|
|
21
|
+
# User Authentication
|
|
22
|
+
SSH_MSG_USERAUTH_REQUEST = 50
|
|
23
|
+
SSH_MSG_USERAUTH_FAILURE = 51
|
|
24
|
+
SSH_MSG_USERAUTH_SUCCESS = 52
|
|
25
|
+
SSH_MSG_USERAUTH_BANNER = 53
|
|
26
|
+
|
|
27
|
+
# Connection Protocol
|
|
28
|
+
SSH_MSG_GLOBAL_REQUEST = 80
|
|
29
|
+
SSH_MSG_REQUEST_SUCCESS = 81
|
|
30
|
+
SSH_MSG_REQUEST_FAILURE = 82
|
|
31
|
+
SSH_MSG_CHANNEL_OPEN = 90
|
|
32
|
+
SSH_MSG_CHANNEL_OPEN_CONFIRMATION = 91
|
|
33
|
+
SSH_MSG_CHANNEL_OPEN_FAILURE = 92
|
|
34
|
+
SSH_MSG_CHANNEL_WINDOW_ADJUST = 93
|
|
35
|
+
SSH_MSG_CHANNEL_DATA = 94
|
|
36
|
+
SSH_MSG_CHANNEL_EXTENDED_DATA = 95
|
|
37
|
+
SSH_MSG_CHANNEL_EOF = 96
|
|
38
|
+
SSH_MSG_CHANNEL_CLOSE = 97
|
|
39
|
+
SSH_MSG_CHANNEL_REQUEST = 98
|
|
40
|
+
SSH_MSG_CHANNEL_SUCCESS = 99
|
|
41
|
+
SSH_MSG_CHANNEL_FAILURE = 100
|
|
42
|
+
|
|
43
|
+
# Extended Data Type Codes (RFC 4254 Section 5.2)
|
|
44
|
+
SSH_EXTENDED_DATA_STDERR = 1
|
|
45
|
+
|
|
46
|
+
# Channel Open Failure Reason Codes (RFC 4254 Section 5.1)
|
|
47
|
+
SSH_OPEN_ADMINISTRATIVELY_PROHIBITED = 1
|
|
48
|
+
SSH_OPEN_CONNECT_FAILED = 2
|
|
49
|
+
SSH_OPEN_UNKNOWN_CHANNEL_TYPE = 3
|
|
50
|
+
SSH_OPEN_RESOURCE_SHORTAGE = 4
|
|
51
|
+
|
|
52
|
+
SSH_OPEN_FAILURE_REASON_NAMES = {
|
|
53
|
+
SSH_OPEN_ADMINISTRATIVELY_PROHIBITED: "SSH_OPEN_ADMINISTRATIVELY_PROHIBITED",
|
|
54
|
+
SSH_OPEN_CONNECT_FAILED: "SSH_OPEN_CONNECT_FAILED",
|
|
55
|
+
SSH_OPEN_UNKNOWN_CHANNEL_TYPE: "SSH_OPEN_UNKNOWN_CHANNEL_TYPE",
|
|
56
|
+
SSH_OPEN_RESOURCE_SHORTAGE: "SSH_OPEN_RESOURCE_SHORTAGE",
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
# Disconnect Reason Codes
|
|
60
|
+
SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT = 1
|
|
61
|
+
SSH_DISCONNECT_PROTOCOL_ERROR = 2
|
|
62
|
+
SSH_DISCONNECT_KEY_EXCHANGE_FAILED = 3
|
|
63
|
+
SSH_DISCONNECT_RESERVED = 4
|
|
64
|
+
SSH_DISCONNECT_MAC_ERROR = 5
|
|
65
|
+
SSH_DISCONNECT_COMPRESSION_ERROR = 6
|
|
66
|
+
SSH_DISCONNECT_SERVICE_NOT_AVAILABLE = 7
|
|
67
|
+
SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED = 8
|
|
68
|
+
SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE = 9
|
|
69
|
+
SSH_DISCONNECT_CONNECTION_LOST = 10
|
|
70
|
+
SSH_DISCONNECT_BY_APPLICATION = 11
|
|
71
|
+
SSH_DISCONNECT_TOO_MANY_CONNECTIONS = 12
|
|
72
|
+
SSH_DISCONNECT_AUTH_CANCELLED_BY_USER = 13
|
|
73
|
+
SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 14
|
|
74
|
+
SSH_DISCONNECT_ILLEGAL_USER_NAME = 15
|
|
75
|
+
|
|
76
|
+
# Default Port
|
|
77
|
+
SSH_PORT = 22
|
|
78
|
+
|
|
79
|
+
# Versions
|
|
80
|
+
MSG_STR_VERSION = "SSH-2.0-AutoMojoSSH_0.1"
|
|
81
|
+
|
|
82
|
+
# Terminal Modes (RFC 4254 Section 8)
|
|
83
|
+
TTY_OP_END = 0
|
|
84
|
+
VINTR = 1
|
|
85
|
+
VQUIT = 2
|
|
86
|
+
VERASE = 3
|
|
87
|
+
VKILL = 4
|
|
88
|
+
VEOF = 5
|
|
89
|
+
VEOL = 6
|
|
90
|
+
VEOL2 = 7
|
|
91
|
+
VSTART = 8
|
|
92
|
+
VSTOP = 9
|
|
93
|
+
VSUSP = 10
|
|
94
|
+
VDSUSP = 11
|
|
95
|
+
VREPRINT = 12
|
|
96
|
+
VWERASE = 13
|
|
97
|
+
VLNEXT = 14
|
|
98
|
+
VFLUSH = 15
|
|
99
|
+
VSWTCH = 16
|
|
100
|
+
VSTATUS = 17
|
|
101
|
+
VDISCARD = 18
|
|
102
|
+
IGNPAR = 30
|
|
103
|
+
PARMRK = 31
|
|
104
|
+
INPCK = 32
|
|
105
|
+
ISTRIP = 33
|
|
106
|
+
INLCR = 34
|
|
107
|
+
IGNCR = 35
|
|
108
|
+
ICRNL = 36
|
|
109
|
+
IUCLC = 37
|
|
110
|
+
IXON = 38
|
|
111
|
+
IXANY = 39
|
|
112
|
+
IXOFF = 40
|
|
113
|
+
IMAXBEL = 41
|
|
114
|
+
ISIG = 50
|
|
115
|
+
ICANON = 51
|
|
116
|
+
XCASE = 52
|
|
117
|
+
ECHO = 53
|
|
118
|
+
ECHOE = 54
|
|
119
|
+
ECHOK = 55
|
|
120
|
+
ECHONL = 56
|
|
121
|
+
NOFLSH = 57
|
|
122
|
+
TOSTOP = 58
|
|
123
|
+
IEXTEN = 59
|
|
124
|
+
ECHOCTL = 60
|
|
125
|
+
ECHOKE = 61
|
|
126
|
+
PENDIN = 62
|
|
127
|
+
OPOST = 70
|
|
128
|
+
OLCUC = 71
|
|
129
|
+
ONLCR = 72
|
|
130
|
+
OCRNL = 73
|
|
131
|
+
ONOCR = 74
|
|
132
|
+
ONLRET = 75
|
|
133
|
+
CS7 = 90
|
|
134
|
+
CS8 = 91
|
|
135
|
+
PARENB = 92
|
|
136
|
+
PARODD = 93
|
|
137
|
+
TTY_OP_ISPEED = 128
|
|
138
|
+
TTY_OP_OSPEED = 129
|
|
139
|
+
|
|
140
|
+
# SFTP Protocol (Version 3)
|
|
141
|
+
SSH_FXP_INIT = 1
|
|
142
|
+
SSH_FXP_VERSION = 2
|
|
143
|
+
SSH_FXP_OPEN = 3
|
|
144
|
+
SSH_FXP_CLOSE = 4
|
|
145
|
+
SSH_FXP_READ = 5
|
|
146
|
+
SSH_FXP_WRITE = 6
|
|
147
|
+
SSH_FXP_LSTAT = 7
|
|
148
|
+
SSH_FXP_FSTAT = 8
|
|
149
|
+
SSH_FXP_SETSTAT = 9
|
|
150
|
+
SSH_FXP_FSETSTAT = 10
|
|
151
|
+
SSH_FXP_OPENDIR = 11
|
|
152
|
+
SSH_FXP_READDIR = 12
|
|
153
|
+
SSH_FXP_REMOVE = 13
|
|
154
|
+
SSH_FXP_MKDIR = 14
|
|
155
|
+
SSH_FXP_RMDIR = 15
|
|
156
|
+
SSH_FXP_REALPATH = 16
|
|
157
|
+
SSH_FXP_STAT = 17
|
|
158
|
+
SSH_FXP_RENAME = 18
|
|
159
|
+
SSH_FXP_READLINK = 19
|
|
160
|
+
SSH_FXP_SYMLINK = 20
|
|
161
|
+
SSH_FXP_STATUS = 101
|
|
162
|
+
SSH_FXP_HANDLE = 102
|
|
163
|
+
SSH_FXP_DATA = 103
|
|
164
|
+
SSH_FXP_NAME = 104
|
|
165
|
+
SSH_FXP_ATTRS = 105
|
|
166
|
+
SSH_FXP_EXTENDED = 200
|
|
167
|
+
SSH_FXP_EXTENDED_REPLY = 201
|
|
168
|
+
|
|
169
|
+
# SFTP Attributes
|
|
170
|
+
SSH_FILEXFER_ATTR_SIZE = 0x00000001
|
|
171
|
+
SSH_FILEXFER_ATTR_UIDGID = 0x00000002
|
|
172
|
+
SSH_FILEXFER_ATTR_PERMISSIONS = 0x00000004
|
|
173
|
+
SSH_FILEXFER_ATTR_ACMODTIME = 0x00000008
|
|
174
|
+
SSH_FILEXFER_ATTR_EXTENDED = 0x80000000
|
|
175
|
+
|
|
176
|
+
# SFTP Status Codes
|
|
177
|
+
SSH_FX_OK = 0
|
|
178
|
+
SSH_FX_EOF = 1
|
|
179
|
+
SSH_FX_NO_SUCH_FILE = 2
|
|
180
|
+
SSH_FX_PERMISSION_DENIED = 3
|
|
181
|
+
SSH_FX_FAILURE = 4
|
|
182
|
+
SSH_FX_BAD_MESSAGE = 5
|
|
183
|
+
SSH_FX_NO_CONNECTION = 6
|
|
184
|
+
SSH_FX_CONNECTION_LOST = 7
|
|
185
|
+
SSH_FX_OP_UNSUPPORTED = 8
|