sshplex 1.0.0__tar.gz → 1.0.4__tar.gz
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.
- {sshplex-1.0.0 → sshplex-1.0.4}/MANIFEST.in +0 -2
- {sshplex-1.0.0/sshplex.egg-info → sshplex-1.0.4}/PKG-INFO +14 -12
- {sshplex-1.0.0 → sshplex-1.0.4}/README.md +6 -4
- {sshplex-1.0.0 → sshplex-1.0.4}/pyproject.toml +8 -8
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/__init__.py +1 -1
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/cli.py +1 -1
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/config-template.yaml +2 -2
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/config.py +3 -3
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/ui/host_selector.py +1 -1
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/main.py +22 -1
- {sshplex-1.0.0 → sshplex-1.0.4/sshplex.egg-info}/PKG-INFO +14 -12
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex.egg-info/SOURCES.txt +0 -2
- sshplex-1.0.4/sshplex.egg-info/requires.txt +15 -0
- sshplex-1.0.0/requirements-dev.txt +0 -6
- sshplex-1.0.0/requirements.txt +0 -8
- sshplex-1.0.0/sshplex.egg-info/requires.txt +0 -15
- {sshplex-1.0.0 → sshplex-1.0.4}/LICENSE +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/setup.cfg +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/__init__.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/logger.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/multiplexer/__init__.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/multiplexer/base.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/multiplexer/tmux.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/sot/__init__.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/sot/base.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/sot/netbox.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/ssh/__init__.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/ssh/connection.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/ssh/manager.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/ui/__init__.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/lib/ui/session_manager.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/populate_examples.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex/sshplex_connector.py +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex.egg-info/dependency_links.txt +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex.egg-info/entry_points.txt +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/sshplex.egg-info/top_level.txt +0 -0
- {sshplex-1.0.0 → sshplex-1.0.4}/tests/test_config.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sshplex
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: Multiplex your SSH connections with style
|
|
5
5
|
Author-email: MJAHED Sabri <contact@sabrimjahed.com>
|
|
6
6
|
License: MIT
|
|
@@ -28,13 +28,13 @@ Classifier: Topic :: Terminals
|
|
|
28
28
|
Requires-Python: >=3.8
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
30
30
|
License-File: LICENSE
|
|
31
|
-
Requires-Dist: pynetbox==7.
|
|
32
|
-
Requires-Dist: textual==
|
|
33
|
-
Requires-Dist: pyyaml==6.0.
|
|
34
|
-
Requires-Dist: pydantic==2.
|
|
35
|
-
Requires-Dist: loguru==0.7.
|
|
36
|
-
Requires-Dist: rich==13.
|
|
37
|
-
Requires-Dist: libtmux==0.
|
|
31
|
+
Requires-Dist: pynetbox==7.5.0
|
|
32
|
+
Requires-Dist: textual==3.3.0
|
|
33
|
+
Requires-Dist: pyyaml==6.0.2
|
|
34
|
+
Requires-Dist: pydantic==2.11.0
|
|
35
|
+
Requires-Dist: loguru==0.7.3
|
|
36
|
+
Requires-Dist: rich==13.9.4
|
|
37
|
+
Requires-Dist: libtmux==0.46.1
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
40
40
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
@@ -83,7 +83,7 @@ SSHplex is a Python-based SSH connection multiplexer that provides a modern Term
|
|
|
83
83
|
- Custom multiplexer plugins
|
|
84
84
|
- 📈 **Performance Optimization**: Enhanced performance for large host lists
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## 📦 Installation
|
|
87
87
|
|
|
88
88
|
### From PyPI (Recommended)
|
|
89
89
|
|
|
@@ -91,6 +91,8 @@ SSHplex is a Python-based SSH connection multiplexer that provides a modern Term
|
|
|
91
91
|
pip install sshplex
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
This installs SSHplex with all its dependencies and makes the `sshplex` and `sshplex-cli` commands available system-wide.
|
|
95
|
+
|
|
94
96
|
### From Source
|
|
95
97
|
|
|
96
98
|
```bash
|
|
@@ -151,8 +153,8 @@ sudo dnf install tmux python3 python3-pip
|
|
|
151
153
|
git clone https://github.com/sabrimjd/sshplex.git
|
|
152
154
|
cd sshplex
|
|
153
155
|
|
|
154
|
-
# Install
|
|
155
|
-
pip3 install -
|
|
156
|
+
# Install in development mode
|
|
157
|
+
pip3 install -e .
|
|
156
158
|
|
|
157
159
|
# Run main TUI application
|
|
158
160
|
python3 sshplex.py
|
|
@@ -183,7 +185,7 @@ This installs the `sshplex-cli` command for NetBox connectivity testing and conf
|
|
|
183
185
|
```bash
|
|
184
186
|
git clone https://github.com/sabrimjd/sshplex.git
|
|
185
187
|
cd sshplex
|
|
186
|
-
pip install -
|
|
188
|
+
pip install -e .
|
|
187
189
|
```
|
|
188
190
|
|
|
189
191
|
This gives you access to the full TUI interface with tmux integration.
|
|
@@ -37,7 +37,7 @@ SSHplex is a Python-based SSH connection multiplexer that provides a modern Term
|
|
|
37
37
|
- Custom multiplexer plugins
|
|
38
38
|
- 📈 **Performance Optimization**: Enhanced performance for large host lists
|
|
39
39
|
|
|
40
|
-
##
|
|
40
|
+
## 📦 Installation
|
|
41
41
|
|
|
42
42
|
### From PyPI (Recommended)
|
|
43
43
|
|
|
@@ -45,6 +45,8 @@ SSHplex is a Python-based SSH connection multiplexer that provides a modern Term
|
|
|
45
45
|
pip install sshplex
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
+
This installs SSHplex with all its dependencies and makes the `sshplex` and `sshplex-cli` commands available system-wide.
|
|
49
|
+
|
|
48
50
|
### From Source
|
|
49
51
|
|
|
50
52
|
```bash
|
|
@@ -105,8 +107,8 @@ sudo dnf install tmux python3 python3-pip
|
|
|
105
107
|
git clone https://github.com/sabrimjd/sshplex.git
|
|
106
108
|
cd sshplex
|
|
107
109
|
|
|
108
|
-
# Install
|
|
109
|
-
pip3 install -
|
|
110
|
+
# Install in development mode
|
|
111
|
+
pip3 install -e .
|
|
110
112
|
|
|
111
113
|
# Run main TUI application
|
|
112
114
|
python3 sshplex.py
|
|
@@ -137,7 +139,7 @@ This installs the `sshplex-cli` command for NetBox connectivity testing and conf
|
|
|
137
139
|
```bash
|
|
138
140
|
git clone https://github.com/sabrimjd/sshplex.git
|
|
139
141
|
cd sshplex
|
|
140
|
-
pip install -
|
|
142
|
+
pip install -e .
|
|
141
143
|
```
|
|
142
144
|
|
|
143
145
|
This gives you access to the full TUI interface with tmux integration.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sshplex"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.4"
|
|
8
8
|
description = "Multiplex your SSH connections with style"
|
|
9
9
|
authors = [{name = "MJAHED Sabri", email = "contact@sabrimjahed.com"}]
|
|
10
10
|
readme = "README.md"
|
|
@@ -30,13 +30,13 @@ classifiers = [
|
|
|
30
30
|
keywords = ["ssh", "tmux", "multiplexer", "netbox", "tui", "terminal"]
|
|
31
31
|
requires-python = ">=3.8"
|
|
32
32
|
dependencies = [
|
|
33
|
-
"pynetbox==7.
|
|
34
|
-
"textual==
|
|
35
|
-
"pyyaml==6.0.
|
|
36
|
-
"pydantic==2.
|
|
37
|
-
"loguru==0.7.
|
|
38
|
-
"rich==13.
|
|
39
|
-
"libtmux==0.
|
|
33
|
+
"pynetbox==7.5.0",
|
|
34
|
+
"textual==3.3.0",
|
|
35
|
+
"pyyaml==6.0.2",
|
|
36
|
+
"pydantic==2.11.0",
|
|
37
|
+
"loguru==0.7.3",
|
|
38
|
+
"rich==13.9.4",
|
|
39
|
+
"libtmux==0.46.1",
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
[project.optional-dependencies]
|
|
@@ -16,7 +16,7 @@ def main() -> int:
|
|
|
16
16
|
# Parse command line arguments
|
|
17
17
|
parser = argparse.ArgumentParser(description="SSHplex CLI: Debug interface for NetBox connectivity testing.")
|
|
18
18
|
parser.add_argument('--config', type=str, default=None, help='Path to the configuration file (default: ~/.config/sshplex/sshplex.yaml)')
|
|
19
|
-
parser.add_argument('--version', action='version', version='SSHplex 1.0.
|
|
19
|
+
parser.add_argument('--version', action='version', version='SSHplex 1.0.4')
|
|
20
20
|
args = parser.parse_args()
|
|
21
21
|
|
|
22
22
|
# Load configuration (will use default path if none specified)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""SSHplex configuration management with pydantic validation
|
|
1
|
+
"""SSHplex configuration management with pydantic validation"""
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Dict, Any, Optional
|
|
@@ -10,7 +10,7 @@ from pydantic import BaseModel, Field, validator
|
|
|
10
10
|
|
|
11
11
|
class SSHplexConfig(BaseModel):
|
|
12
12
|
"""SSHplex main configuration."""
|
|
13
|
-
version: str = "1.0.
|
|
13
|
+
version: str = "1.0.4"
|
|
14
14
|
session_prefix: str = "sshplex"
|
|
15
15
|
|
|
16
16
|
|
|
@@ -123,7 +123,7 @@ def initialize_default_config() -> Path:
|
|
|
123
123
|
def load_config(config_path: Optional[str] = None) -> Config:
|
|
124
124
|
"""Load and validate configuration from YAML file.
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
Uses ~/.config/sshplex/sshplex.yaml as default location.
|
|
127
127
|
Creates config directory and copies template on first run.
|
|
128
128
|
|
|
129
129
|
Args:
|
|
@@ -327,7 +327,7 @@ class HostSelector(App):
|
|
|
327
327
|
broadcast = "ON" if self.use_broadcast else "OFF"
|
|
328
328
|
self.log_message(f"INFO: Connecting to {len(selected_host_objects)} selected hosts in {mode} mode with Broadcast {broadcast}...", level="info")
|
|
329
329
|
|
|
330
|
-
#
|
|
330
|
+
# just log the selection
|
|
331
331
|
for host in selected_host_objects:
|
|
332
332
|
self.log_message(f"INFO: Would connect to: {host.name} ({host.ip}) - Cluster: {getattr(host, 'cluster', 'N/A')}", level="info")
|
|
333
333
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import sys
|
|
4
4
|
import argparse
|
|
5
|
+
import shutil
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from datetime import datetime
|
|
7
8
|
from typing import Any
|
|
@@ -13,14 +14,34 @@ from .lib.ui.host_selector import HostSelector
|
|
|
13
14
|
from .sshplex_connector import SSHplexConnector
|
|
14
15
|
|
|
15
16
|
|
|
17
|
+
def check_system_dependencies() -> bool:
|
|
18
|
+
"""Check if required system dependencies are available."""
|
|
19
|
+
# Check if tmux is installed and available in PATH
|
|
20
|
+
if not shutil.which("tmux"):
|
|
21
|
+
print("❌ Error: tmux is not installed or not found in PATH")
|
|
22
|
+
print("\nSSHplex requires tmux for terminal multiplexing.")
|
|
23
|
+
print("Please install tmux:")
|
|
24
|
+
print("\n macOS: brew install tmux")
|
|
25
|
+
print(" Ubuntu: sudo apt install tmux")
|
|
26
|
+
print(" RHEL/CentOS/Fedora: sudo dnf install tmux")
|
|
27
|
+
print("\nThen try running SSHplex again.")
|
|
28
|
+
return False
|
|
29
|
+
|
|
30
|
+
return True
|
|
31
|
+
|
|
32
|
+
|
|
16
33
|
def main() -> int:
|
|
17
34
|
"""Main entry point for SSHplex TUI Application."""
|
|
18
35
|
|
|
19
36
|
try:
|
|
37
|
+
# Check system dependencies first
|
|
38
|
+
if not check_system_dependencies():
|
|
39
|
+
return 1
|
|
40
|
+
|
|
20
41
|
# Parse command line arguments
|
|
21
42
|
parser = argparse.ArgumentParser(description="SSHplex: Multiplex your SSH connections with style.")
|
|
22
43
|
parser.add_argument('--config', type=str, default=None, help='Path to the configuration file (default: ~/.config/sshplex/sshplex.yaml)')
|
|
23
|
-
parser.add_argument('--version', action='version', version='SSHplex 1.0.
|
|
44
|
+
parser.add_argument('--version', action='version', version='SSHplex 1.0.4')
|
|
24
45
|
parser.add_argument('--debug', action='store_true', help='Run in debug mode (CLI only, no TUI)')
|
|
25
46
|
args = parser.parse_args()
|
|
26
47
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sshplex
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: Multiplex your SSH connections with style
|
|
5
5
|
Author-email: MJAHED Sabri <contact@sabrimjahed.com>
|
|
6
6
|
License: MIT
|
|
@@ -28,13 +28,13 @@ Classifier: Topic :: Terminals
|
|
|
28
28
|
Requires-Python: >=3.8
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
30
30
|
License-File: LICENSE
|
|
31
|
-
Requires-Dist: pynetbox==7.
|
|
32
|
-
Requires-Dist: textual==
|
|
33
|
-
Requires-Dist: pyyaml==6.0.
|
|
34
|
-
Requires-Dist: pydantic==2.
|
|
35
|
-
Requires-Dist: loguru==0.7.
|
|
36
|
-
Requires-Dist: rich==13.
|
|
37
|
-
Requires-Dist: libtmux==0.
|
|
31
|
+
Requires-Dist: pynetbox==7.5.0
|
|
32
|
+
Requires-Dist: textual==3.3.0
|
|
33
|
+
Requires-Dist: pyyaml==6.0.2
|
|
34
|
+
Requires-Dist: pydantic==2.11.0
|
|
35
|
+
Requires-Dist: loguru==0.7.3
|
|
36
|
+
Requires-Dist: rich==13.9.4
|
|
37
|
+
Requires-Dist: libtmux==0.46.1
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
40
40
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
@@ -83,7 +83,7 @@ SSHplex is a Python-based SSH connection multiplexer that provides a modern Term
|
|
|
83
83
|
- Custom multiplexer plugins
|
|
84
84
|
- 📈 **Performance Optimization**: Enhanced performance for large host lists
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## 📦 Installation
|
|
87
87
|
|
|
88
88
|
### From PyPI (Recommended)
|
|
89
89
|
|
|
@@ -91,6 +91,8 @@ SSHplex is a Python-based SSH connection multiplexer that provides a modern Term
|
|
|
91
91
|
pip install sshplex
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
This installs SSHplex with all its dependencies and makes the `sshplex` and `sshplex-cli` commands available system-wide.
|
|
95
|
+
|
|
94
96
|
### From Source
|
|
95
97
|
|
|
96
98
|
```bash
|
|
@@ -151,8 +153,8 @@ sudo dnf install tmux python3 python3-pip
|
|
|
151
153
|
git clone https://github.com/sabrimjd/sshplex.git
|
|
152
154
|
cd sshplex
|
|
153
155
|
|
|
154
|
-
# Install
|
|
155
|
-
pip3 install -
|
|
156
|
+
# Install in development mode
|
|
157
|
+
pip3 install -e .
|
|
156
158
|
|
|
157
159
|
# Run main TUI application
|
|
158
160
|
python3 sshplex.py
|
|
@@ -183,7 +185,7 @@ This installs the `sshplex-cli` command for NetBox connectivity testing and conf
|
|
|
183
185
|
```bash
|
|
184
186
|
git clone https://github.com/sabrimjd/sshplex.git
|
|
185
187
|
cd sshplex
|
|
186
|
-
pip install -
|
|
188
|
+
pip install -e .
|
|
187
189
|
```
|
|
188
190
|
|
|
189
191
|
This gives you access to the full TUI interface with tmux integration.
|
sshplex-1.0.0/requirements.txt
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# Core functionality - Phase 1 & 2
|
|
2
|
-
pynetbox==7.3.3 # NetBox API client
|
|
3
|
-
textual==0.47.1 # Modern TUI framework
|
|
4
|
-
pyyaml==6.0.1 # YAML configuration
|
|
5
|
-
pydantic==2.5.0 # Data validation
|
|
6
|
-
loguru==0.7.2 # Simple, powerful logging
|
|
7
|
-
rich==13.7.0 # Enhanced terminal output (works with textual)
|
|
8
|
-
libtmux==0.25.0 # tmux session management
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|