当没有可用的 Kali SSH 服务器,且任务可以在持久化 Kali 容器内通过 CLI 工具完成时,使用 Docker 模式。
Docker 是一种执行环境,不只是安装方式。应保持容器持久化,使已安装工具和生成的工件能跨会话保留。
| 场景 | 推荐方式 |
|---|---|
| 有完整 Kali SSH 服务器 | 使用 SSH/服务器模式 |
| 没有 Kali 服务器,但可用 Docker | 使用持久化命名容器 |
| 需要可复现的本地环境 | 使用自定义 Dockerfile |
| 同 LAN、依赖 ARP、无线、重度原始套接字或服务栈较重的任务 | 优先通过 SSH 使用完整 Kali VM/server |
docker exec 运行 Kali 命令。docker cp 复制需要的工件。向容器发送 Python 或 Shell 脚本时,使用 docker cp 而非 heredoc 管道——heredoc 会引入 CRLF 行尾(macOS)和 shell 变量冲突(如 UID 在 bash 中为只读变量)。
cat > /tmp/script.py << 'EOF'
# 脚本内容
EOF
docker cp /tmp/script.py kali-pentest:/tmp/script.py
docker exec kali-pentest python3 /tmp/script.py
避免在通过此方式传递的脚本中使用含嵌套引号的 f-string——使用 % 格式化或预计算变量,防止跨 shell 层的转义问题。
docker-mode-persistent-container.md — 持久化容器创建、工具安装、元包、字典和自定义 Dockerfile 示例。docker-mode-networking.md — host network、原始套接字、Docker Desktop 限制、可达性检查和路由排障。