ssh-licco 2.6.0__tar.gz → 2.7.0__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.
- {ssh_licco-2.6.0/ssh_licco.egg-info → ssh_licco-2.7.0}/PKG-INFO +1 -1
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/pyproject.toml +1 -1
- {ssh_licco-2.6.0 → ssh_licco-2.7.0/ssh_licco.egg-info}/PKG-INFO +1 -1
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/__init__.py +2 -2
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/session_manager.py +7 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/LICENSE +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/README.md +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/setup.cfg +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_licco.egg-info/SOURCES.txt +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_licco.egg-info/dependency_links.txt +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_licco.egg-info/entry_points.txt +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_licco.egg-info/requires.txt +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_licco.egg-info/top_level.txt +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/__main__.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/audit_logger.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/batch_executor.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/cli.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/clients/__init__.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/clients/additional_clients.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/clients/factory.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/clients/interface.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/clients/paramiko_client.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/config_manager.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/connection_config.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/connection_pool.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/exceptions.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/executor.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/__init__.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/connect.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/context.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/docker.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/execute.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/file_transfer.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/host.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/key.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/process.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/schemas.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/session.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/handlers/utils.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/key_manager.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/logging_config.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/security.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/server.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/service.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/tunnel.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/ssh_mcp/watchdog.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/tests/test_config_manager.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/tests/test_key_manager.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/tests/test_security.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/tests/test_server.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/tests/test_session_manager.py +0 -0
- {ssh_licco-2.6.0 → ssh_licco-2.7.0}/tests/test_watchdog.py +0 -0
|
@@ -692,6 +692,7 @@ class SSHSession:
|
|
|
692
692
|
|
|
693
693
|
class SessionManager:
|
|
694
694
|
# 🔒 安全限制:最大并发会话数(防止资源耗尽 DoS)
|
|
695
|
+
# 可通过环境变量 SSH_MAX_SESSIONS / SSH_MAX_SESSIONS_PER_HOST 覆盖
|
|
695
696
|
MAX_SESSIONS = 20
|
|
696
697
|
MAX_SESSIONS_PER_HOST = 5 # 每个主机最多 5 个并发会话
|
|
697
698
|
|
|
@@ -701,6 +702,12 @@ class SessionManager:
|
|
|
701
702
|
self._shutdown_event = asyncio.Event()
|
|
702
703
|
self._timeout_cleanup_task: asyncio.Task | None = None
|
|
703
704
|
self._logger = get_logger("SessionManager")
|
|
705
|
+
# 环境变量覆盖每主机会话上限与全局会话上限(与 sshd MaxSessions 解耦)
|
|
706
|
+
# 注意:这是 MCP 应用层限制,独立于 sshd 的 MaxSessions
|
|
707
|
+
self.MAX_SESSIONS = max(1, int(os.getenv("SSH_MAX_SESSIONS", str(type(self).MAX_SESSIONS))))
|
|
708
|
+
self.MAX_SESSIONS_PER_HOST = max(
|
|
709
|
+
1, int(os.getenv("SSH_MAX_SESSIONS_PER_HOST", str(type(self).MAX_SESSIONS_PER_HOST)))
|
|
710
|
+
)
|
|
704
711
|
self._start_timeout_cleanup()
|
|
705
712
|
self._session_counter = 0 # 用于统计和限制
|
|
706
713
|
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|