SSHImager:Linux云主机远程磁盘镜像利器
Linux 服务器在远端机房甚至云上,你摸不到机器、插不了硬盘。如何不在远程服务器安装工具,又能远程获取一份可以虚拟机仿真启动的虚拟磁盘镜像?你可能还遇到只想取系统分区,又无法排出超大的数据分区窘境。
应急响应的取证困境
做过APT应急响应的同行比较清楚,针对某些背景的受控机,简单粗暴先获取磁盘镜像。
理想情况下,你可以到现场插一块移动硬盘,用 dd 做一个逐字节的完整拷贝。但现实中,越来越多的服务器部署在远程机房、公有云或异地数据中心,你根本无法物理接触到机器。即便是托管机房,协调现场操作也意味着数小时甚至数天的延迟。
远程取证通常不方便在被入侵的服务器上安装额外软件。一方面是取证规范的要求——尽量减少对目标系统的修改,保护现场完整性;另一方面也是实际操作的考量——你不确定这台机器上还有没有后门在监控你的操作。
那远程传输用什么协议?SSH 几乎是唯一的选择。它是 Linux 服务器上最普遍、最安全的远程访问方式,加密传输、身份认证,不需要额外开放端口。
SSHImager 就是基于这个思路设计的:通过 SSH 连接远程 Linux 服务器,直接读取磁盘块设备,将完整的磁盘镜像拉回本地。不需要在目标服务器上安装任何东西。
工作原理:SSH + SFTP 读取磁盘
SSHImager 的数据传输基于 SFTP 协议。
SFTP(SSH File Transfer Protocol)是 SSH 协议的一个子系统,它允许通过 SSH 加密通道进行文件传输。几乎所有 Linux 发行版在安装 OpenSSH 时,都会同时安装一个名为 sftp-server 的二进制文件。这个程序是 SFTP 子系统的服务端实现,通常位于以下路径之一:
- •
/usr/libexec/openssh/sftp-server(RHEL / CentOS) - •
/usr/lib/openssh/sftp-server(Debian / Ubuntu) - •
/usr/lib/ssh/sftp-server(Arch)
注意:SSHImager 依赖目标服务器上的这个 sftp-server 进程。 但这并不意味着你需要额外安装什么——它是 OpenSSH 的标准组件,几乎 100% 的 Linux 服务器上都已经存在。SSHImager 连接后,会通过 SSH 的 SFTP 子系统调用这个已有的 sftp-server,然后通过它来读取 /dev/sda 等块设备文件,就像读取普通文件一样。
如果你使用 root 账号登录,SSHImager 直接使用标准的 SFTP 子系统。如果是普通用户登录,SSHImager 会自动通过 sudo 启动 sftp-server,以获取读取块设备所需的权限。整个过程对使用者是透明的。
应急响应的核心用法:系统分区 Full 模式取证
SSHImager 提供两种拷贝模式:Full(完整拷贝) 和 Used-only(仅已用块)。在应急响应场景下,理解这两种模式的区别至关重要。
Full 模式:取证必选
Full 模式对分区进行逐扇区的完整拷贝,包括所有空闲块。这正是取证所需要的——攻击者删除的恶意文件、清除的日志、擦除的痕迹,数据虽然在文件系统层面"消失"了,但很可能仍然残留在磁盘的空闲块中。只有 Full 模式才能保留这些被删除的数据,让你后续可进行深度分析和数据恢复。
Used-only 模式:适用于大容量数据分区
那 Used-only 模式在应急响应中就没有用了吗?并非如此。
很多服务器的磁盘布局是这样的:一个相对较小的系统分区(比如 50-100 GB),加上一个或多个大容量的数据分区(比如挂载在 /data 或 /home 的几百 GB 甚至 TB 级分区)。如果数据分区的内容与安全事件无关(比如业务数据库、媒体文件等),对它进行 Full 模式的完整拷贝可能需要几个小时甚至更长,既不现实也不必要。
这时候,你可以选择 排除不相关的数据分区,或者对数据分区使用 Used-only 模式以节省时间,而把系统分区设为 Full 模式确保取证完整性。SSHImager 支持对每个分区单独配置拷贝模式,这在应急响应中非常实用。
典型取证命令示例
# 场景:/dev/sda 有 3 个分区# sda1 (ext4, /boot, 500MB) — 系统引导,Full 模式# sda2 (ext4, /, 50GB) — 系统根分区,Full 模式# sda3 (ext4, /data, 500GB) — 业务数据,排除sshimager root@192.168.1.50:/dev/sda -o evidence.vmdk --exclude 3
上面的命令对分区 1 和分区 2 使用默认的 Full 模式(完整取证),同时排除了 500 GB 的数据分区,大幅缩短了取证时间。
如果你不确定哪些分区需要取证,可以使用交互模式先查看磁盘布局:
sshimager root@192.168.1.50 -i
在交互式 TUI 界面中,你可以看到所有磁盘和分区的信息(大小、文件系统类型、挂载点),然后用键盘逐个配置每个分区的模式——Full、Used-only 或 Exclude。
断线自动重连:无人值守取证
远程取证经常面临网络不稳定的问题,尤其是跨地域、跨国的场景。磁盘镜像传输可能需要几个小时,中间 SSH 连接断掉一次两次是常有的事。
SSHImager 内置了自动重连机制。SSH 连接中断后,工具会以指数退避策略(1s → 2s → 5s → 10s → 30s → 60s)自动重试,最多重试 9999 次。重连成功后,从中断的精确字节偏移量恢复传输,中断期间已读取的不完整数据会被丢弃,确保镜像不会出现数据损坏。
这意味着你可以在晚上启动取证任务,第二天早上回来看结果,不用盯着屏幕担心断线。
Agent 模式:大容量磁盘的加速选项
默认的 SFTP 模式完全不需要在服务器上安装任何东西,适合对现场保护要求最严格的场景。但如果取证对象是一个几百 GB 的磁盘,SFTP 的传输效率可能成为瓶颈。
SSHImager 提供了可选的 Agent 模式:将一个轻量级的二进制程序临时上传到目标服务器的 /tmp 目录,通过自定义二进制协议替代 SFTP,并使用 ZSTD 压缩算法减少网络传输量。Agent 在启动时会自动删除自身的二进制文件(--delete 标志),不在磁盘上留下痕迹。
sshimager root@192.168.1.50 -i --agent
需要注意的是,Agent 模式虽然会自删除二进制文件,但毕竟在目标系统上执行了一个新进程,会产生进程痕迹。如果取证规范要求绝对零接触,请使用默认的 SFTP 模式。在实际应急响应中,可以根据紧迫程度和取证要求自行权衡。
输出格式:到手就能分析
SSHImager 支持四种输出格式:
| | |
|---|
| | 用 VMware Workstation 启动镜像做动态分析 |
| | |
| | |
| | |
VMDK、VHD几乎所有取证工具都能直接加载。如果你需要在虚拟机中启动被入侵的系统进行动态分析(观察恶意进程行为、检查持久化机制等),VMDK 或 VHD 格式可以直接导入 VMware / Hyper-V,省去了格式转换的步骤。
所有格式都支持稀疏输出——全零区域不写入磁盘,这在排除了大分区的情况下可以显著减小镜像文件体积。
开源与下载
SSHImager 是一个开源项目,代码托管在 GitHub:
https://github.com/threatexpert/sshimager
你可以在项目的 Releases 页面直接下载编译好的二进制文件(Windows / Linux amd64),无需自行搭建 Go 编译环境,下载即用。
如果你在使用中遇到问题或有功能建议,欢迎在 GitHub 上提 Issue。
总结
在应急响应场景下,SSHImager 解决的核心问题是:当你无法物理接触服务器时,如何远程获取一份满足取证要求的磁盘镜像。
它的关键优势在于:
- • 零安装——依赖目标系统已有的 SSH 和 sftp-server,不引入新程序,最大程度保护现场
- • 灵活的分区策略——系统分区 Full 模式确保取证完整性,数据分区可排除或 Used-only 以节省时间
- • 断线自动恢复——长时间跨网络传输不怕中断,适合无人值守取证