跨网段 SSH 操控 Kali 虚拟机实战:从 macOS 宿主机完成华为交换机巡检工具部署
场景:网络安全 / 红队方向 · 虚拟化运维 · 自动化部署
一、需求背景
本机是 macOS(Apple Silicon),通过 Parallels Desktop 运行 Kali Linux 虚拟机。用户需要把某微信公众号文章《Python自动化巡检华为交换机(含告警判断+钉钉推送)》中的工具部署到 Kali 虚拟机内,涉及两个 Python 依赖(netmiko、requests)和一个巡检脚本。
核心矛盾:Kali 虚拟机与 macOS 宿主机不在同一网段,且虚拟机内 SSH 服务默认未开启,外部无法直接进入。
二、环境拓扑:跨网段是怎么来的
先看清网络结构。Parallels Desktop 默认给虚拟机提供Shared(共享)网络,本质是一个 NAT 虚拟网段:
┌───────────────────────────── macOS 宿主机 ─────────────────────────────┐ │ Wi-Fi 物理网卡:192.168.x.x(局域网真实网段) │ │ Parallels 虚拟网卡 bridge100:10.211.55.1(NAT 网关) │ └───────────────────────────────┬────────────────────────────────────────┘ │ 虚拟交换机 / NAT ┌───────────────────────────────┴────────────────────────────────────────┐ │ Kali Linux 虚拟机:10.211.55.43(与宿主机物理网段不同) │ └─────────────────────────────────────────────────────────────────────────┘- 宿主机物理网段:
192.168.x.0/24(Wi-Fi) - Kali 所在虚拟网段:
10.211.55.0/24(Parallels Shared NAT) - 两者跨网段,宿主机与虚拟机之间靠 Parallels 虚拟网卡
10.211.55.1做网关转发
所以在实施前,第一步就是确认 Kali 在虚拟网段内的地址。
三、难点分析:为什么不能直接"点开虚拟机操作"
常规思路是打开 Parallels 窗口直接在 Kali 里操作,但这条路在本场景被堵死:
- Parallels Tools 未安装:宿主机侧
prlctl exec依赖虚拟机内的 Parallels Tools 建立会话通道,本机 Kali 显示GuestTools: state=not_installed,执行prlctl exec直接报错:Unable to open new session in this virtual machine. Make sure your virtual machine has finished booting, runs the latest version of Parallels Tools... - GUI 自动化链路受限:系统内的 GUI 操作代理无法接管 Parallels Desktop 窗口内的交互。
- 虚拟机内无远程服务:端口扫描显示 22 / 5900 / 3389 等常用远程端口全部关闭,Kali 的 SSH 服务未启动。
结论:必须先进入 Kali 系统内部开通 SSH 服务,然后一切自动化才能通过 SSH 通道完成。
四、实施步骤全记录
Step 1:定位 Kali 虚拟机的 IP
Kali 与宿主机跨网段,首先要找到它在虚拟网段里的地址。三种手段交叉验证:
# 1. Parallels 命令行列出虚拟机/usr/local/bin/prlctl list-a# UUID STATUS IP_ADDR NAME# {66a2...} running - Kali Linux# 2. Parallels 会把虚拟机名注册进宿主机 /etc/hostsgrepkali /etc/hosts# 10.211.55.43 kali-linux.shared kali-linux #prl_hostonly shared# 3. ARP 表确认 MAC 与 IP 的绑定arp-a|grep10.211# kali-linux.shared (10.211.55.43) at 0:1c:42:3c:da:7a on bridge100确认:Kali 在10.211.55.43,宿主机虚拟网关是10.211.55.1。
Step 2:开通 Kali 的 SSH 服务
这是整个链路最关键的一步。由于外部无入口,需要进入 Kali 内执行(本场景由用户在虚拟机终端执行一次):
sudosystemctlenable--nowsshenable --now同时完成两件事:
enable:设置开机自启(防止重启后失联)--now:立即启动服务
启动后用ss -tlnp | grep 22确认 sshd 已监听 22 端口。
Step 3:宿主机侧建立 SSH 通道(含密码自动化)
macOS 没有预装sshpass,批量免交互登录用expect脚本处理密码输入:
expect-c' set timeout 30 spawn ssh -o StrictHostKeyChecking=no bruce_xiaowei@10.211.55.43 "echo CONNECTED; whoami; python3 --version" expect { "password:" { send "密码\r"; exp_continue } "CONNECTED" { exp_continue } eof } '关键点:
StrictHostKeyChecking=no:跳过首次连接的 host key 确认,保证脚本无人值守exp_continue:匹配到密码提示后自动发送口令,循环等待命令输出- 连接成功后即可在 Kali 内任意执行命令
安全提示:
expect脚本里的密码是明文,仅适合临时自动化;生产环境请改用 SSH 密钥认证,见文末安全建议。
Step 4:SCP 跨网段传输文件
脚本文件先在宿主机本地生成,通过 SCP 上传到 Kali 指定目录:
expect-c' set timeout 60 spawn scp -o StrictHostKeyChecking=no huawei_inspect.py \ bruce_xiaowei@10.211.55.43:/home/bruce_xiaowei/huawei_inspect/huawei_inspect.py expect { "password:" { send "密码\r"; exp_continue } eof } 'SCP 底层走 SSH 加密通道,跨网段传输由 Parallels NAT 网关转发,无需额外配置端口映射。
Step 5:虚拟环境与依赖安装
在 Kali 内创建独立 venv,避免污染系统 Python,也绕开 Kali 对系统级 pip 安装的限制(PEP 668):
cd~/huawei_inspect python3-mvenv venv ./venv/bin/pipinstall-q--upgradepip ./venv/bin/pipinstall-qnetmiko requests安装结果:
netmiko 4.8.0 requests 2.34.2Step 6:远端校验
cd~/huawei_inspect ./venv/bin/python-mpy_compile huawei_inspect.py&&echoCOMPILE_OK语法编译通过,工具部署完成,可直接运行:
cd~/huawei_inspectsourcevenv/bin/activate python huawei_inspect.py五、排错记录:Connection refused 的两次出现
| 阶段 | 现象 | 原因 | 处理 |
|---|---|---|---|
| 首次扫描 | 22 端口全部关闭,Connection refused | Kali 内 SSH 服务未启动 | 进入 Kali 执行systemctl enable --now ssh |
| 启动后立即连接 | 仍Connection refused | 服务状态刚变更,端口尚未完全就绪 / 用户侧命令未生效 | 重试连接,确认systemctl is-active ssh返回active |
教训:SSH 服务刚启动时不要立即连接,先验证ss -tlnp | grep 22确认监听,再发起连接。
六、安全建议
- 用密钥认证替代密码:
ssh-keygen生成密钥对,ssh-copy-id分发公钥,彻底告别密码自动化,也避免 expect 脚本里明文密码残留。 - 弱口令风险:本例测试口令强度低,生产环境应使用强口令 + 失败锁定(fail2ban)。
- SSH 白名单:Kali 作为安全测试平台,建议
sshd_config限定AllowUsers与来源 IP,避免虚拟网段内其他主机扫描到开放端口。 - 网络隔离意识:Parallels Shared 网络的 NAT 网关本身有隔离作用,如需桥接到物理网段,务必先评估暴露面。
七、总结
本次跨网段部署的完整链路是:
定位虚拟网段 IP → 虚拟机内开通 SSH → 宿主机 expect 密码自动化登录 → SCP 跨网段传文件 → venv 隔离安装依赖 → 远端语法校验核心思想一句话:虚拟机一旦开通 SSH,宿主机与虚拟机的"网段隔阂"就只剩一条加密通道的距离。账号密码只是入口,SSH 提供的加密传输、命令执行与文件传输三合一能力,才是跨网段自动化运维的基石。
本文基于真实排障过程整理,适用于 Parallels / VMware / VirtualBox 等虚拟化环境下 macOS 与 Linux 虚拟机的跨网段运维场景。