企业级 SSH 密钥管理方案,为 SSH MCP Server 提供安全的密钥管理。
本项目是基于 Cigarliu/ssh-mcp-server 的企业级密钥管理增强方案。 原项目提供了强大的 SSH/SFTP MCP 服务器功能,本项目专注于为其提供安全的密钥管理集成。
- 🔐 Service Token 认证 - 生产环境推荐,最小权限原则
- 📁 文件挂载模式 - 比环境变量更安全(推荐)
- 🔑 环境变量模式 - 兼容传统部署
- 🧹 内存安全清除 - 使用后自动覆盖敏感数据
- 📊 审计日志 - 完整的密钥访问记录
- 🔄 密钥轮换 - 无需重启服务
⚠️ 危险变量检测 - 自动识别 RCE 风险
pip install doppler-ssh-skillgit clone https://github.com/example/doppler-ssh-skill.git
cd doppler-ssh-skill
pip install -e .pip install -e ".[dev]"# macOS / Linux
curl -Ls https://cli.doppler.com/install.sh | sh
# Windows (使用 PowerShell)
iwr -Uri https://doppler.com/install.ps1 -UseBasicParsing | iexdoppler login# 创建项目
doppler projects create ssh-mcp-server
# 创建配置环境
doppler configs create prod
# 添加 secrets
doppler secrets set SSHMCP_HOST_PROD_PASSWORD="your-password" --config prod
doppler secrets set SSHMCP_HOST_PROD_KEY_PASSPHRASE="key-passphrase" --config prod
# 生成 Service Token(生产环境必需)
doppler configs tokens create prod-token --config prod --plainfrom doppler_ssh import DopplerSSHSkill, DopplerMode
# 方式 1: 文件挂载模式(推荐,最安全)
skill = DopplerSSHSkill(
project="ssh-mcp-server",
config="prod",
mode=DopplerMode.MOUNT
)
with skill:
host_config = skill.load_host_config("prod")
print(f"Connected to {host_config.host}")
skill.secure_clear(host_config)
# 方式 2: 环境变量模式
skill = DopplerSSHSkill(
project="ssh-mcp-server",
config="prod",
mode=DopplerMode.ENV
)
with skill:
host_config = skill.load_host_config("prod")
print(f"Connected to {host_config.host}")
skill.secure_clear(host_config)# 验证配置
doppler-ssh-skill validate --config config.yaml
# 加载主机配置
doppler-ssh-skill load -p ssh-mcp-server -c prod --host prod
# 生成 secrets 模板
doppler-ssh-skill template -p ssh-mcp-server -c prod -o secrets.yaml
# 列出所有 secrets
doppler-ssh-skill list-secrets -p ssh-mcp-serverdoppler:
enabled: true
mode: mount # mount | env
project: ssh-mcp-server
config: prod
mount_path: /run/secrets/ssh
mount_max_reads: 1
hosts:
prod:
host: "192.168.1.100"
port: 22
username: "root"
auth_source: "doppler"
secret_prefix: "prod"
auth_type: "password"
staging:
host: "192.168.1.101"
port: 22
username: "admin"
auth_source: "doppler"
secret_prefix: "staging"
auth_type: "key"
key_path: "~/.ssh/id_rsa"
dev:
host: "localhost"
port: 22
username: "developer"
auth_source: "doppler"
secret_prefix: "dev"
auth_type: "password"# 必需的环境变量
export DOPPLER_TOKEN="dp.st.xxx" # Service Token
# 可选配置
export DOPPLER_PROJECT="ssh-mcp-server"
export DOPPLER_CONFIG="prod"
export DOPPLER_MODE="mount"from doppler_ssh import DopplerSSHSkill, DopplerMode
# 使用环境变量
skill = DopplerSSHSkill()
# 显式指定参数
skill = DopplerSSHSkill(
project="ssh-mcp-server",
config="prod",
mode=DopplerMode.MOUNT,
mount_path="/run/secrets/ssh",
mount_max_reads=1,
timeout=30,
cache_ttl=300
)# 生成只读 Service Token
doppler configs tokens create prod-token --config prod --plain
# 导出到环境变量
export DOPPLER_TOKEN="dp.st.xxx"# 使用 doppler run 的 --mount 参数
doppler run \
--mount /run/secrets/ssh \
--mount-max-reads 1 \
-- python -m doppler_ssh run# 自动清除内存中的 secrets
skill.secure_clear(host_config)
# 清除所有敏感数据
skill.clear_all()自动检测并拒绝以下危险变量名:
LD_PRELOAD,LD_LIBRARY_PATH- Linux RCEDYLD_INSERT_LIBRARIES- macOS RCEPYTHONWARNINGS,NODE_OPTIONS- 语言级 RCE
- Cigarliu/ssh-mcp-server - 原项目,提供强大的 SSH/SFTP MCP 服务器功能
- Doppler - 密钥管理服务
原因: Service Token 无效或已过期
解决方案:
# 重新生成 Token
doppler configs tokens create new-token --config prod --plain
# 更新环境变量
export DOPPLER_TOKEN="dp.st.xxx"原因: Secret 名称不匹配
解决方案:
# 检查 Secret 名称格式
# 预期格式: SSHMCP_HOST_{HOST}_{SECRET_NAME}
# 例如: SSHMCP_HOST_PROD_PASSWORD
# 列出所有 secrets
doppler secrets list --config prod
# 或使用 CLI
doppler-ssh-skill list-secrets -p ssh-mcp-server -c prod原因: 文件挂载路径权限不足
解决方案:
# 检查挂载路径权限
ls -la /run/secrets/ssh
# 或切换到环境变量模式
export DOPPLER_MODE=env原因: 网络超时或主机不可达
解决方案:
# 增加超时时间
skill = DopplerSSHSkill(timeout=60)
# 或在配置中设置
# timeout: 60原因: 文件挂载读取次数超限
解决方案:
# 增加最大读取次数
doppler run --mount-max-reads 10 -- your-command# 启用调试日志
export DOPPLER_SSH_DEBUG=1
# 或使用 CLI
doppler-ssh-skill validate --config config.yaml -v# 查看详细日志
doppler-ssh-skill load -p ssh-mcp-server -c prod --host prod --verbose┌─────────────────────────────────────────┐
│ Doppler SSH Skill │
├─────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────────────┐ │
│ │ Mount │ │ Environment │ │
│ │ Mode │ or │ Mode │ │
│ └────┬────┘ └────────┬────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ SecretResolver │ │
│ │ - normalize_host_name() │ │
│ │ - build_secret_name() │ │
│ └─────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ SecurityManager │ │
│ │ - validate_token_type() │ │
│ │ - secure_clear_string() │ │
│ │ - mask_secrets_in_logs() │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
# 克隆仓库
git clone https://github.com/example/doppler-ssh-skill.git
cd doppler-ssh-skill
# 安装依赖
pip install -e ".[dev]"
# 运行测试
pytest
# 代码格式化
black src/
ruff check src/
# 类型检查
mypy src/MIT License - 详见 LICENSE