plink.exe 是 PuTTY 工具集中的一个命令行工具,用于通过 SSH(安全外壳协议)进行远程连接。它通常用于在没有图形界面的情况下实现 SSH 连接,适合脚本和自动化任务。 这些应用场景展示了 plink.exe 在远程管理、脚本自动化和安全连接方面的强大功能,适用于系统管理员和开发人员。

plink.exe 时钟 / 时间精度完整版本演进(依附 PuTTY 底层 timing.c 计时框架)

plink 与图形 PuTTY 共享同一套计时内核timing.c,计时精度分为调度定时器、调试日志时间戳、SSH 握手延迟测算、链路保活计时四大维度,随 Windows 高精度 API 迭代与 PuTTY 版本分为 5 个阶段,核心区分底层计时 API、输出时间戳粒度、抗时钟跳变能力。

前置基础概念

  1. 低精度旧 APIGetTickCount() / timeGetTime(),系统时钟中断粒度 10~15.6ms,仅毫秒级,NTP 校时会发生时钟跳变;
  2. 高精度单调间隔 APIQueryPerformanceCounter(QPC),硬件 TSC/HPET,0.1~1μs 分辨率,不受系统时间修改影响;
  3. 高精度绝对 UTC APIGetSystemTimePreciseAsFileTime,100ns FILETIME 粒度,Win8/Server2012 及以上原生支持Microsoft ...;
  4. plink 计时两大用途:
    • 相对计时:SSH 握手延迟、报文往返 RTT、保活心跳、隧道超时、定时器调度;
    • 绝对时间戳:-v/-log调试日志打印事件发生时刻。

阶段 1:初代低精度阶段 0.48 ~ 0.53(1999–2002,仅 SSH1)

底层计时实现

  1. 仅使用GetTickCount(),系统默认 15.6ms 粒度,最小可分辨间隔≈16ms;
  2. 无 QPC 高精度计数,所有延迟测算、定时器、日志时间戳全部依赖毫秒级系统滴答;
  3. 无独立单调时钟:系统 NTP 校时、手动改时间会直接导致定时器错乱、隧道心跳误判断开。

精度短板

  1. SSH 握手延迟只能精确到 16ms 区间,无法定位亚毫秒级握手卡顿;
  2. -v调试日志仅输出秒级时间戳,无毫秒、微秒分段,多并发事件日志时序重叠无法区分先后;
  3. 反向隧道保活检测误差极大,高延迟网络频繁误断;
  4. 不支持 Windows XP 以外新系统高精度 API,无任何无截断时序存储。

适用局限

仅手工交互式登录,完全不适合自动化性能审计、网络故障精细排查。

阶段 2:引入 QPC 高精度间隔计时 0.54 ~ 0.61(2004–2011,SSH2 标准化)

核心计时升级

  1. 底层timing.c新增双计时分支
    • 相对间隔测算(RTT、握手耗时、心跳):优先启用QueryPerformanceCounter(QPC),微秒级精度;
    • 绝对日志时间戳:仍使用GetSystemTimeAsFileTime,仅毫秒级,输出截断至 3 位毫秒,丢失百纳秒精度;
  2. 新增-w连接超时参数、SSH 重协商定时,依托 QPC 消除 16ms 粒度误差;
  3. 修复时钟跳变 BUG:区分系统墙钟与硬件单调计数器,NTP 校时不再打断隧道长连接。

日志精度变化

-log日志时间戳格式:YYYY-MM-DD HH:MM:SS.fff,仅保留 3 位毫秒,后 4 位 100ns 刻度直接截断丢弃,无法做亚毫秒取证。

标志性版本 0.61

完成timing.c重构,统一 QPC 作为所有网络延迟测算基准,成为运维批量巡检基线版本,但绝对时间戳仍存在精度截断。

阶段 3:企业稳定优化阶段 0.62 ~ 0.77(2012–2022,国内机房存量最大版本)

计时体系完善

  1. QPC 硬件计数稳定性增强:适配多核 CPU 非不变 TSC,自动切换 HPET 时钟源,消除跨核计时漂移;
  2. 定时器调度精度提升:隧道、重协商、保活心跳误差压缩至≤10μs;
  3. 日志时间戳优化:日志内部内存保留完整 64 位 FILETIME(100ns 原始值),仅打印时截断 3 位毫秒;可通过修改源码导出完整 7 位亚秒。

关键业务精度提升

  1. 批量自动化脚本:远程命令执行耗时测算误差从 16ms 降至微秒级,可精准区分数据库、脚本执行亚毫秒耗时;
  2. 反向隧道断线检测:QPC 单调计数器不受系统时间回拨影响,7×24 常驻穿透无误断开;
  3. Kerberos/GSSAPI 认证超时、代理握手延迟高精度测算,定位企业防火墙阻塞毫秒级延迟。

局限

未调用GetSystemTimePreciseAsFileTime,绝对 UTC 时间戳输出始终截断百纳秒,无法满足审计取证无截断 100ns 时序要求。

阶段 4:无截断 100ns 完整高精度落地 0.78 ~ 0.82(2022–2024,现代全 Unicode 重构)

里程碑高精度升级(核心质变)

  1. 新增系统版本判断:Win8+/Server2012 自动调用GetSystemTimePreciseAsFileTime获取原生 100ns FILETIME,Win7 及以下兼容回落旧 API;
  2. -log日志输出完整 7 位亚秒时间戳 YYYY-MM-DD HH:MM:SS.fffffff,全程无截断、无舍入,完整保留 100ns 最小刻度;
  3. 双时序日志持久化:日志同时写入「QPC 原始硬件单调计数值 + 100ns UTC FILETIME」两套时序,对标 WES 无截断双时序取证标准;
  4. 串口-ser模式同步升级高精度计时,交换机 Console 操作日志完整亚秒时间戳。

新增精度相关参数行为

  1. -v详细调试模式:每条 SSH 报文收发同时打印 QPC 原始计数值,可离线重排序日志事件,规避系统时间篡改干扰;
  2. -C流量压缩耗时微秒级测算,定位低带宽链路压缩性能瓶颈;
  3. IPv6 链路本地连接计时优化,消除 IPv6 协议栈毫秒级计时偏移。

适用场景

金融、政企等保审计、工控实时故障溯源,日志可作为电子证据,时序无精度丢失。

阶段 5:后量子安全 + 虚拟化高精度增强 0.83 ~ 0.84(2025–2026 最新版)

计时底层深度加固

  1. 虚拟化 QPC 增强:Hyper-V/VMware 虚拟机内维持亚微秒级稳定精度,修复虚拟机时钟漂移导致隧道误断;
  2. 密码学恒定时间防护(DIT):加密密钥交换、签名运算使用独立 QPC 采样,防止时序侧信道攻击,满足等保密码安全规范PuTTY;
  3. 日志结构化时序字段:日志文件头部存储 QPC 硬件频率基准,离线解析可精确还原原始微秒耗时,无时序换算误差;
  4. 完全废弃 Windows XP/2003 兼容计时分支,仅依赖 Win10 + 原生高精度 API,彻底移除 15.6ms 低精度兜底逻辑。

极致无截断特性

  1. 导出日志二进制缓存完整 64 位 FILETIME 与 QPC UINT64,不压缩、不取模、不截断高位;
  2. 批量多服务器并发日志时序对齐,配合 IEEE1588 PTP 可实现跨主机百纳秒级事件关联。

四大核心维度横向演进对比表

维度 0.48~0.53 0.54~0.61 0.62~0.77 0.78~0.82 0.83~0.84
相对延迟测算 API GetTickCount(16ms) QPC 微秒级 QPC 多核稳定版 QPC 硬件自适应 QPC 虚拟化增强 + 密码学 DIT
绝对 UTC 日志精度 仅秒级 3 位毫秒截断 内存完整、打印截断 3 位毫秒 完整 7 位亚秒 100ns 无截断 双时序持久化无丢失
抗时钟跳变能力 极差,NTP 易断隧道 基础区分单调 / 墙钟 稳定长连接无误断 双时序完全隔离 离线日志可还原真实时序
日志可审计取证 不可,时序重叠丢失 仅粗粒度排查 内部有完整时序但输出截断 满足等保取证无截断标准 结构化时序离线校验
最小可分辨事件间隔 ≈16ms ≈1μs ≤10μs 0.1μs 硬件分辨率 0.1μs + 虚拟化补偿

实际业务层面演进带来的能力变化

1. 自动化脚本与运维排查

  • 旧版(0.61 及更早):只能定位 10ms 以上故障,瞬时亚毫秒网络毛刺完全无法捕获;
  • 0.78 + 新版:可精准识别 SSH 握手、数据库查询、端口转发 0.1ms 级延迟波动,定位防火墙、网卡中断瓶颈。

2. 安全审计、电子取证

  • 0.77 及以下:日志时间戳仅 3 位毫秒,无法区分间隔小于 1ms 的连续操作,不满足等保三级时序取证要求;
  • 0.78+:日志 7 位亚秒完整存储,配套 QPC 单调计数,即使篡改 Windows 系统时间,仍可还原真实操作先后顺序,对标 WES 无截断时序规范。

3. 7×24 常驻反向隧道内网穿透

  • 早期版本依赖系统滴答,网络抖动、NTP 校时频繁触发隧道重连;
  • 0.62 后依托 QPC 单调计数器,系统时间修改不影响保活判断,断线自动重连逻辑精准无误判;0.83 虚拟化环境彻底解决虚拟机时钟漂移导致隧道掉线。

4. 密码安全时序防护

0.83 新增恒定时间加密运算计时,防止攻击者通过 SSH 握手耗时差异破解私钥,金融、涉密环境强制升级最新版。

常见精度踩坑边界说明

  1. 系统版本下限GetSystemTimePreciseAsFileTime仅 Win8/Server2012 以上可用,Win7 运行 0.82+ plink 仍会回落至毫秒截断日志;
  2. 日志打印截断区分:0.62~0.77 内存内部保留完整 100ns 时序,仅控制台 / 文本打印截断 3 位毫秒,二进制日志可二次解析恢复完整精度;
  3. QPC 硬件差异:老旧工控机无 HPET / 不变 TSC,QPC 分辨率会下降至 1μs 左右,无法达到 100ns 理论上限;
  4. 批处理脚本时间捕获:plink 内部高精度计时仅用于自身日志,Windows 批处理%time%仍受系统 15.6ms 时钟粒度限制,如需全局无截断时序需读取 plink 原生日志文件。

plink.exe 完整演进发展史(依附 PuTTY 主线,分 5 大阶段)

plink.exe 是 PuTTY 套件配套纯命令行 SSH 工具,代码与图形 PuTTY 共享同一套 sshlib 加密 / 协议栈,所有功能、安全修复、参数特性跟随 PuTTY 主版本迭代,整体分为初创原始阶段、SSH2 标准化、自动化脚本成熟、现代加密 / 隧道增强、后量子安全现代化五个周期。

一、初创原始阶段:0.48 ~ 0.53(1999–2002),仅基础 SSH1,无自动化能力

核心背景

plink 随 PuTTY 早期版本同步发布,定位仅替代图形 PuTTY 做简易命令行登录,面向手工运维,无脚本设计。
  1. 仅支持 SSH-1 协议,无 SSH2,加密算法老旧(DES、3DES),无现代密钥交换;
  2. 基础参数极少:仅支持host -P -l -pw,无-batch、无-i私钥、无端口转发、无日志;
  3. 关键缺陷:
    • -P端口参数存在 BUG(0.53b 才修复,此前完全失效);
    • 无主机密钥注册表缓存,每次连接强制弹窗确认,无法自动化;
    • 不支持私钥登录,仅明文密码;
    • 无隧道转发(-L/-R/-D全部未实现);
  4. 可用场景:仅交互式手动登录,完全不适合批处理、自动化脚本。

标志性版本 0.53b(2002)

修复-P端口参数 BUG,是早期第一个可用稳定版,但仍无任何自动化特性。

二、标准化成型阶段:0.54 ~ 0.61(2004–2011),SSH2 全面落地,基础自动化能力诞生

核心里程碑

  1. 双协议支持 SSH1+SSH2,默认优先 SSH2,新增完整隧道转发体系(-L/-R/-D动态 SOCKS 代理)chiark;
  2. 新增脚本核心参数 -batch 批处理静默模式:禁用弹窗交互,未知主机、密码缺失直接返回错误码,正式具备自动化脚本能力
  3. 新增私钥参数 -i,原生支持 PuTTY .ppk 私钥,摆脱明文密码;
  4. 新增 -log 日志输出、-v 详细调试模式、-m 批量读取本地命令文件;
  5. 新增代理支持(SOCKS4/SOCKS5/HTTP CONNECT 代理),企业办公穿透防火墙;
  6. 支持 PuTTY 保存会话名称直接调用 plink "SessionName",复用图形界面全套配置;
  7. 新增串口模式 -ser,交换机 Console 运维,脱离 SSH 协议;
  8. 安全修复:内存私钥残留漏洞,认证后清理内存敏感数据(0.61 修复password-not-wiped)PuTTY。

0.54 关键新增(2004)

动态 SOCKS 转发-D、代理 DNS 转发、命令行批量执行远程指令。

0.60 标志性完善

完整实现三类隧道转发,参数体系定型,企业批量巡检脚本开始大规模使用 plink。

三、企业稳定成熟阶段:0.62 ~ 0.77(2012–2022),脚本生态完善,现代密钥、Kerberos、连接共享落地

该阶段是国内运维使用最广、兼容性最强的版本(0.62 至今大量老旧机房保留),自动化、隧道、安全能力全面补齐。

1. 认证体系重大升级

  • 新增 -agent / -noagent 适配 Pageant 密钥代理,多私钥自动匹配,脚本无需硬编码私钥路径;
  • 完整支持 GSSAPI/Kerberos 域免登 -agent,AD 域环境零凭证自动化巡检;
  • 密钥算法扩容:ECDSA P-256/P384,摆脱仅 RSA;
  • 导入 OpenSSH 旧式 PEM 私钥,.ppk格式兼容外部密钥;

2. 脚本自动化参数完善

  • -hostkey 参数:预先指定主机指纹,新服务器免交互信任,彻底解决批量部署弹窗阻塞;
  • -no-pty 无伪终端模式:执行单条命令消除 ANSI 彩色转义字符,日志干净无乱码;
  • -t/-T 终端分配精细控制,适配交互式运维工具;
  • 标准化退出码,%errorlevel%精准区分网络 / 认证 / 命令执行故障;

3. 隧道与网络增强

  • SSH 连接共享(0.64):单 TCP 连接复用多路 SSH 通道,多条 plink 共用一条连接降低开销;
  • -w 连接超时参数,高延迟机房防卡死;
  • -C zlib 流量压缩,低带宽机房提速;

4. 安全漏洞批量修复

修复代理溢出、密钥内存二次残留、认证弹窗欺骗等高危漏洞,0.63/0.64 彻底解决私钥内存泄露问题PuTTY;

5. 0.62 行业分水岭

Windows XP/Server2003 完美兼容,无高版本系统依赖,国内企业机房、工控设备运维标准化工具,至今存量巨大。

四、现代加密兼容阶段:0.78 ~ 0.82(2022–2024),Ed25519、OpenSSH 新密钥、全 Unicode、IPv6 完善

1. 加密算法现代化

  • 原生支持 Ed25519、Ed448 轻量化椭圆曲线密钥,替代老旧 RSA;
  • 兼容 OpenSSH 7.8 + 新格式私钥(-----BEGIN OPENSSH PRIVATE KEY-----),无需提前转换 PPK(早期版本必须 puttygen 转换);
  • 修复 P521 ECDSA 随机数偏置漏洞(CVE-2024-31497),消除密钥泄露风险;

2. Unicode 全链路支持(0.82 重大更新)

  • 命令行参数、用户名、密码、远程路径、日志文件全部支持 UTF-8 中文、多语言字符,解决中文乱码;
  • Windows 控制台原生识别 UTF-8 输出,无需修改系统代码页;

3. IPv6 完整标准化

链路本地地址fe80::xx%网卡索引稳定支持,双栈、纯 IPv6 机房无兼容 BUG;

4. 功能细节优化

  • 反向隧道、正向隧道多路并发稳定性提升,断线重连无内存泄漏;
  • 代理协议解析优化,复杂企业 HTTP/SOCKS 代理穿透成功率提升;

5. 废弃特性逐步清理

SSH-1 默认禁用,未来版本彻底移除,老旧设备需强制指定-1兼容。

五、后量子安全现代化阶段:0.83 ~ 0.84(2025–2026 当前最新版),抗量子密钥交换、前置执行命令、深度安全加固

1. 后量子密码落地(0.83)

新增 ML-KEM 抗量子密钥交换算法,抵御量子计算机破解传统 RSA/ECDH,金融、政企等保合规刚需chiark;

2. 全新前置执行参数

支持连接建立前执行本地命令(端口敲门、WOL 唤醒),自动化穿透隔离机房新增原生能力;

3. 底层安全修复

  • 修复 RSA 密钥交换远程触发双重释放崩溃漏洞;
  • 修复 ECDSA 远程断言崩溃,消除 DoS 风险;
  • 代理认证弹窗伪造漏洞修复,中间人防护强化PuTTY;

4. 脚本运维优化

  • 日志结构化信息增强,可直接导入审计系统;
  • 批量执行多服务器时 TCP 资源自动回收,长循环脚本无句柄泄露;

5. 长期废弃规划

  1. 完全移除 SSH-1 协议支持,新版本不再兼容老旧 SSH1 设备;
  2. 逐步弱化 3DES、DES 等弱加密套件,默认仅启用 AES-GCM、ChaCha20 现代加密;
  3. 淘汰老旧 Windows(XP/2003)兼容代码,0.84 仅支持 Win10 及以上。

维度横向演进对比(四大核心能力时间线)

1. 自动化脚本能力演进

  1. 0.48–0.53:无任何自动化,强制交互弹窗;
  2. 0.54–0.61:诞生-batch-i、隧道基础自动化;
  3. 0.62–0.77:-hostkey-no-pty、Kerberos、Pageant,完整企业自动化;
  4. 0.78+:Unicode 中文无乱码、OpenSSH 原生密钥,降低脚本部署门槛。

2. 密钥 / 加密体系演进

  1. 早期:仅 SSH1 RSA、3DES,无私钥文件;
  2. 0.54–0.61:SSH2 + .ppk 私钥,RSA 唯一算法;
  3. 0.62–0.77:ECDSA、Pageant、Kerberos 域认证;
  4. 0.78–0.82:Ed25519、原生 OpenSSH 新私钥;
  5. 0.83+:ML-KEM 后量子加密,抗量子攻击。

3. 隧道 / 穿透能力演进

  1. 0.53 及更早:无任何端口转发;
  2. 0.54:-L/-R正向 / 反向隧道,-D SOCKS 代理;
  3. 0.64:SSH 连接共享,单连接多路隧道;
  4. 0.78+:IPv6 隧道稳定、并发多路隧道内存优化。

4. 系统兼容性演进

  1. 0.48–0.62:兼容 Windows 98/XP/2003,老旧系统友好;
  2. 0.63–0.77:主流 Win7/Win10,XP 兼容逐步弱化;
  3. 0.80+:放弃 XP 底层适配,仅 Win10/11/Server2016+。

关键废弃 / 淘汰特性梳理(版本分界线)

  1. SSH-1 协议:0.62 后默认关闭,0.84 起计划彻底移除,老旧嵌入式设备必须使用 0.62 及以下;
  2. OpenSSH 新版私钥兼容:0.77 及更早必须 puttygen 转换为 PPK,0.78 + 直接原生读取;
  3. 主机密钥交互弹窗:0.62 前无-hostkey,无法静默批量部署;
  4. 中文 UTF-8 支持:0.82 之前命令行中文极易乱码,需修改系统代码页;
  5. 内存密钥清理:0.61 及以前存在私钥内存残留,存在窃取风险,生产禁止使用。

plink.exe 底层完整原理(PuTTY 命令行 SSH 客户端)

一、整体分层架构(自上而下完整链路)

plaintext
批处理/PowerShell/脚本 → plink.exe 主程序(命令行解析、会话调度)
├─ PuTTY核心公共库:putty.dll / sshlib(SSH协议栈实现)
├─ 底层传输适配层:TCP套接字、串口、代理(SOCKS5/HTTP)、隧道转发
├─ 加密密码学底层:crypto库(AES/ChaCha20/RSA/ECDSA/Ed25519、HMAC、DH/ECDH密钥交换)
└─ OS系统API:Win32 网络API、控制台输入输出、注册表密钥缓存、系统密码存储
plink 并非独立从零实现 SSH,复用 PuTTY 全套底层核心代码,仅移除图形窗口,替换为纯控制台交互逻辑。

二、第一层:命令行入口层(plink.exe 自身逻辑)

1. 命令参数解析

解析所有参数:主机地址、端口、用户名、私钥文件 (-i)、端口转发 (-L/-R/-D)、批处理静默模式 (-batch)、日志输出 (-log)、代理配置、超时、加密算法强制指定、命令远程执行。
 
关键参数分支逻辑:
  1. 交互 SSH 终端模式:无-batch、无远程指令,开启交互式 shell;
  2. 自动化批处理模式:-batch 禁用交互式弹窗 / 密码输入,失败直接返回错误码(脚本核心);
  3. 单次远程命令模式:末尾追加指令,连接建立执行后立刻断开会话;
  4. 纯端口转发模式:仅隧道,不启动远程 shell。

2. 控制台 IO 重定向

plink 接管 Windows 标准输入stdin、标准输出stdout、标准错误stderr
  • 交互式:本地键盘输入转发 SSH 通道,远程终端输出打印控制台;
  • 脚本自动化:支持管道、文件重定向(plink user@host cmd < input.txt > result.log);
  • 关闭 GUI 弹窗:图形 PuTTY 的密码弹窗、主机密钥弹窗全部转为控制台文本提示,-batch直接拒绝弹窗、返回失败。

3. 会话缓存与主机密钥校验调度

读取 / 写入 PuTTY 统一注册表存储路径:
 
HKCU\Software\SimonTatham\PuTTY\SshHostKeys
  1. 首次连接:远程主机公钥不存在注册表,控制台打印指纹,询问是否信任;-batch模式直接中断连接,返回非 0 退出码;
  2. 已缓存主机:比对服务端公钥指纹,不一致直接断开(中间人攻击防护);
  3. 支持-hostkey参数手动指定允许的主机密钥,脚本免交互确认。

三、第二层:公共核心库 putty.dll/sshlib(SSH 协议核心实现)

1. TCP 网络底层连接建立

  1. 调用 Win32 Winsock API 创建 IPv4/IPv6 TCP 套接字,默认 22 端口,支持自定义-P端口;
  2. 兼容各类代理链路:SOCKS4/SOCKS5、HTTP CONNECT 代理,代理隧道先建立再发起 SSH 握手;
  3. 串口模式(非 SSH):兼容 PuTTY 串口底层,用于交换机 Console 连接;
  4. 连接超时控制,无响应自动销毁套接字释放资源。

2. SSH 完整握手四阶段底层流程(SSH-2,plink 仅支持 SSH2,废弃 SSH1)

阶段 1:版本协商

本地发送 SSH 版本字符串 SSH-2.0-PuTTY_Release_0.80,服务端返回对应版本,协商兼容算法集。

阶段 2:密钥交换(KEX)

  1. 两端交换支持的密钥交换算法:ECDH NIST P-256/384、X25519、传统 Diffie-Hellman;
  2. 交换临时公钥,本地 + 远端计算共享秘密;
  3. 结合会话 ID 派生 6 组对称密钥:客户端→服务端加密 / 客户端→服务端 HMAC、服务端→客户端加密 / 服务端→客户端 HMAC、IV 初始化向量;
  4. 生成会话完整性校验密钥,防止报文篡改。

阶段 3:服务端身份校验(核心安全机制)

服务端出示主机公钥 (RSA/ECDSA/Ed25519),计算指纹,与本地注册表缓存比对:
  • 匹配:继续握手;
  • 不匹配 / 无缓存:交互询问;批处理模式直接退出。

阶段 4:用户身份认证(plink 支持 4 种底层认证顺序)

  1. GSSAPI/Kerberos 域认证(企业域环境优先);
  2. 私钥文件认证 (-i):读取.ppk 私钥,可选密钥短语;自动兼容 OpenSSH 私钥(新版 PuTTY 支持);
  3. 交互式密码认证:控制台读取密码输入;-batch下禁用;
  4. 键盘交互多步骤认证(双因素 2FA 验证码),批处理模式不可用。

3. SSH 加密传输层(报文封装 / 解封装)

  1. 所有业务流量(终端输入、命令输出、转发流量)拆分 SSH 报文,头部附加长度、消息类型;
  2. 对称加密:AES-256-GCM、ChaCha20-Poly1305、3DES 等,全程加密载荷;
  3. 完整性校验:每包附加 HMAC-SHA2/Poly1305 校验码,接收方校验篡改;
  4. 压缩层(可选):zlib 数据流压缩,降低带宽占用。

4. 三大通道类型复用实现(SSH 通道多路复用)

SSH 单 TCP 连接内虚拟多条独立逻辑通道,plink 完整实现三类通道:
  1. Session 会话通道(默认):远程 shell、单次远程命令执行;
    • shell:交互式终端,同步窗口大小调整报文;
    • exec:单次执行指令,执行完毕关闭通道;
  2. 本地端口转发 -L:本地端口监听,流量封装 SSH 转发远端目标地址;
  3. 远程端口转发 -R:远端服务器端口监听,流量逆向通过 SSH 隧道回传本地;
  4. SOCKS 动态转发 -D:本地 SOCKS5 代理,所有 TCP 流量走 SSH 加密隧道。

四、第三层:密码学底层依赖(PuTTY 内置独立加密库,不依赖系统 SSL)

PuTTY 自带自研轻量化加密库,无 OpenSSL 依赖,plink 直接复用:
  1. 非对称算法:RSA、ECDSA P-256/384、Ed25519(主机密钥、用户私钥签名验签);
  2. 密钥交换:DH、ECDH X25519;
  3. 对称加密:AES-GCM、ChaCha20、3DES、Blowfish;
  4. 完整性:HMAC-SHA256、Poly1305;
  5. 随机数生成:Windows CryptGenRandom 系统安全随机源,用于密钥、IV 生成。

五、第四层:Windows 系统底层交互逻辑

  1. 注册表持久化存储
    • 主机公钥缓存:防止中间人攻击;
    • 保存已保存会话配置(保存端口、代理、私钥路径,plink 可直接加载会话名plink "MySession");
  2. 控制台字符适配
     
    处理 Windows 控制台编码、ANSI/VT100 终端转义序列,远程彩色输出、光标控制正常渲染;
  3. 进程资源管理
     
    脚本批量调用时自动释放套接字、通道、加密内存;异常崩溃自动发送 SSH 断开报文,清理远程会话;
  4. 退出码标准化
     
    区分网络错误、认证失败、命令执行返回码,批处理%errorlevel%可捕获故障类型,适配自动化判断。

六、完整执行时序示例(批处理自动化:私钥免密执行远程命令)

  1. 脚本启动 plink -i id_rsa.ppk admin@192.168.1.100 -batch df -h
  2. plink 解析参数,加载.ppk 私钥,读取注册表校验主机密钥;
  3. Winsock 建立 TCP 22 连接,发起 SSH-2 握手、ECDH 密钥交换;
  4. 校验服务端主机指纹通过,使用私钥完成用户公钥认证;
  5. SSH 会话通道创建,发送exec指令 df -h
  6. 远端执行命令,输出数据流加密回传 plink;
  7. plink 解密报文,打印 stdout 至控制台;命令执行完毕关闭通道、发送 SSH 关闭报文;
  8. 销毁 TCP 套接字,返回远程命令退出码给脚本。

七、核心设计特点(底层优势适配自动化脚本)

  1. 无图形依赖:纯控制台,无窗口弹窗,适配后台计划任务、CI/CD 流水线;
  2. 完整退出码机制:脚本可精准识别网络断开、密码错误、主机密钥异常、命令执行失败;
  3. 隧道多路复用:一条 SSH 连接同时承载命令 + 端口转发,节省连接开销;
  4. 独立加密栈:不依赖系统 OpenSSL 环境,Windows 纯净环境直接运行;
  5. 兼容 PuTTY 全量会话配置,可复用图形界面保存的代理、加密、转发参数。

一、plink.exe 完整官方命令行参数分类大全

1. 基础连接参数

表格
 
 
 
参数 作用说明
host 目标主机地址、域名、IPv4/IPv6,或 PuTTY 已保存会话名称
-P port 指定 SSH 端口,默认 22
-l user 指定登录用户名
-pw pass 明文传入登录密码(脚本慎用,存在明文泄露风险)
-i private.ppk 指定 PuTTY 格式私钥文件,免密登录核心参数
-agent 复用 Pageant 密钥代理缓存的私钥
-noagent 禁用 Pageant 代理

2. 自动化 / 批处理静默参数(脚本核心)

表格
 
 
 
参数 作用说明
-batch 批处理模式,禁用所有交互式弹窗 / 输入;主机密钥未知、需要密码输入时直接退出并返回错误码,自动化必备
-v 开启详细调试日志,打印 SSH 握手、密钥交换全过程
-log log.txt 将完整连接日志输出到指定文件
-hostkey xx:xx 预先指定允许的主机公钥指纹,免交互确认新主机

3. 端口隧道转发参数

表格
 
 
 
参数 作用说明
-L localport:targethost:targetport 本地端口转发(正向隧道):本地端口流量加密转发至远端目标
-R remoteport:localhost:localport 远程端口转发(反向隧道):远端服务器端口流量回传本地
-D localport 动态 SOCKS5 代理隧道

4. 协议与安全加密控制参数

表格
 
 
 
参数 作用说明
-1 强制使用老旧 SSH-1(已废弃,不推荐)
-2 强制仅使用 SSH-2(默认)
-C 开启 zlib 流量压缩,降低带宽消耗
-m file 读取本地文本文件,批量执行多条远程命令
-no-pty 不分配伪终端,执行单条命令专用,避免终端转义字符干扰输出

5. 网络代理、超时、链路参数

表格
 
 
 
参数 作用说明
-proxy [socks/http]://addr:port 指定代理服务器
-proxyuser/-proxypw 代理账号密码
-t 持续分配终端,保持长连接(交互式 shell)
-T 关闭终端分配(单次执行命令)
-w seconds 连接超时时间,单位秒

6. 输出与退出控制、特殊模式

表格
 
 
 
参数 作用说明
-ser 切换为串口 Console 模式(非 SSH,交换机 / 防火墙本地调试)
-V 打印 plink 版本号后退出
-h 打印帮助文档
末尾直接跟命令 连接建立后单次执行远程指令,执行完成自动断开 SSH

二、plink.exe 各类远程连接实操用法

1. 基础密码交互式连接(手动交互)

cmd
 
 
 
plink root@192.168.10.10
 
执行后控制台手动输入密码,进入交互式 SSH 终端。

2. 明文密码静默连接(简单自动化,不推荐生产)

cmd
 
 
 
plink -l root -pw MyPass123 192.168.10.10
 

3. PPK 私钥免密登录(生产推荐,无明文密码)

cmd
 
 
 
plink -l root -i D:\keys\server.ppk 192.168.10.10
 

4. 单次执行远程命令,执行完自动断开

cmd
 
 
 
# 查看磁盘占用
plink -batch -l root -i D:\keys\server.ppk 192.168.10.10 df -h
# 执行多条命令分号分隔
plink -batch root@192.168.10.10 "df -h; free -h"
 

5. 加载 PuTTY 保存会话连接

图形 PuTTY 保存会话名为Server01,直接复用全部配置(端口、私钥、代理)
cmd
 
 
 
plink "Server01"
 

6. 端口转发示例

本地正向隧道:本地 3306 转发服务器内网 MySQL

cmd
 
 
 
plink -L 3306:127.0.0.1:3306 -batch root@192.168.10.10
 

SOCKS5 代理隧道:本地 1080 端口全局代理

cmd
 
 
 
plink -D 1080 -batch root@192.168.10.10
 

7. 主机指纹免交互信任(新服务器自动放行)

cmd
 
 
 
plink -hostkey 2a:ff:xx:xx:xx root@192.168.10.10
 

8. IPv6 远程连接

cmd
 
 
 
plink root@[2001:db8::1] -i D:\keys\server.ppk
 

三、脚本中使用 plink.exe 实现自动化任务(Batch/PowerShell)

前置核心规范

  1. 必须携带 -batch 参数,禁止弹窗阻塞脚本;
  2. 优先使用.ppk私钥免密,禁止明文-pw写入生产脚本;
  3. 使用-log输出日志,便于故障排查;
  4. 读取%errorlevel%(Batch)/$LASTEXITCODE(PowerShell)捕获连接 / 命令失败状态。

示例 1:Windows 批处理脚本(.bat)批量巡检服务器磁盘

batch
 
 
 
@echo off
set "KEY=D:\ssh_keys\server.ppk"
set "HOST=192.168.10.10"
set "USER=root"
set "LOG=D:\logs\ssh_run.log"

:: 执行远程磁盘查询,输出日志
plink -batch -l %USER% -i %KEY% -log %LOG% %HOST% df -h >> D:\result\disk.txt

:: 判断执行结果
if %errorlevel% equ 0 (
    echo 执行成功
) else (
    echo SSH连接/命令执行失败,错误码:%errorlevel%
)
 

示例 2:PowerShell 自动化脚本,批量多台服务器执行脚本

powershell
 
 
 
$privateKey = "D:\ssh_keys\server.ppk"
$servers = @("192.168.10.10","192.168.10.11")

foreach($srv in $servers){
    # 执行系统负载查询
    & plink -batch -l root -i $privateKey $srv "uptime; free -h"
    if($LASTEXITCODE -ne 0){
        Write-Warning "服务器 $srv 连接失败"
    }
}
 

示例 3:读取本地命令文件批量执行多条指令(-m 参数)

commands.txt
plaintext
 
 
 
df -h
free -h
systemctl status nginx
 
批处理调用:
cmd
 
 
 
plink -batch -l root -i server.ppk -m commands.txt 192.168.10.10
 

示例 4:文件重定向,本地输入脚本、捕获远程输出

cmd
 
 
 
:: 输入指令文件,输出结果到本地文件
plink -batch root@192.168.10.10 < cmd_input.txt > output.log
 

示例 5:反向隧道后台常驻自动化(开机自启脚本)

batch
 
 
 
@echo off
:: 保持远程反向隧道,断开自动重试
:loop
plink -batch -R 8080:127.0.0.1:80 -i D:\keys\server.ppk root@192.168.10.10
timeout /t 5 /nobreak
goto loop
 

自动化避坑要点 ⚠️

  1. 禁止明文密码写入脚本-pw 会在进程列表、日志中泄露密码,一律使用 PPK 私钥 + Pageant;
  2. 必须加 -batch:新服务器无缓存主机密钥时不加该参数会卡住等待人工输入;
  3. 远程多命令建议加 -no-pty:消除终端 ANSI 转义字符干扰日志解析;
  4. 长连接隧道脚本增加循环重试逻辑,网络断线自动重连;
  5. 私钥文件做好权限管控,仅当前用户可读,防止窃取。

plink.exe 特殊 / 另类高阶使用示例

覆盖隧道嵌套、无交互裸指令、串口运维、代理穿透、后台常驻、批量批量、管道联动、内网反向穿透、IPv6 双栈、免主机密钥校验、Pageant 联动等非常规场景。

一、免交互、无弹窗、全新主机自动信任(生产自动化刚需另类用法)

1. 预先写入主机指纹,彻底免确认

cmd
 
 
 
:: 提前获取目标主机公钥指纹后写入命令,新机器无需人工交互
plink -batch -hostkey 71:2f:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77 root@192.168.1.100 df -h
 

2. 自动写入注册表主机密钥(彻底跳过首次信任弹窗)

配合puttygen提取公钥,通过注册表导入,plink 执行完全静默,无任何交互阻断。

二、多层隧道嵌套(本地转发 + 远程反向隧道 复合穿透)

场景:本地 Windows → 跳板机 A → 内网设备 B,本地直连 B 数据库

cmd
 
 
 
:: 第一层:本地3307映射跳板机3306,跳板机再反向映射内网数据库
plink -batch -L 3307:127.0.0.1:3306 -R 9000:192.168.5.10:3306 -i D:\key\jump.ppk admin@jump-server
 
访问本地127.0.0.1:3307等价直接访问内网数据库。

三、纯后台常驻断线自动重连隧道(开机自启内网穿透脚本)

batch 无限循环反向隧道,网络断开 5 秒自动重试,无窗口阻塞

batch
 
 
 
@echo off
:RETRY
:: 反向隧道:服务器9090端口流量转发本地80网站
plink -batch -R 9090:127.0.0.1:80 -C -i D:\ssh\priv.ppk root@43.xxx.xxx.xxx
timeout /t 5 /nobreak >nul
goto RETRY
 

隐藏控制台窗口运行(vbs 包装,完全后台无黑框)

创建Tunnel.vbs
vbs
 
 
 
Set WshShell = WScript.CreateObject("WScript.Shell")
Do
    WshShell.Run "plink -batch -R 9090:127.0.0.1:80 -i D:\ssh\priv.ppk root@43.xxx.xxx.xxx",0,True
    WScript.Sleep 5000
Loop
 
双击运行全程无控制台弹窗。

四、串口 Console 模式(非 SSH,交换机 / 防火墙运维另类用法 -ser

不依赖网络,直接操作本地 COM 串口设备,替代超级终端,脚本批量下发配置
cmd
 
 
 
:: COM3 波特率9600,串口连接交换机,执行配置文件
plink -ser COM3 -speed 9600 < switch_cmd.txt
 
批量读取设备输出保存日志:
cmd
 
 
 
plink -ser COM3 -speed 115200 > dev_log.txt
 

五、Pageant 密钥代理联动(多私钥自动切换,脚本不携带私钥文件路径)

  1. 打开 Pageant,导入全部.ppk 私钥;
  2. plink 不加-i参数,自动读取代理缓存密钥,无需明文存放私钥路径:
cmd
 
 
 
plink -batch root@192.168.1.100 uptime
 
多服务器不同私钥全自动匹配,无需修改脚本。

六、SOCKS5 代理穿透 SSH(跳板机全局代理,浏览器 / 软件走加密隧道)

本地 1080 端口开启加密代理,FQ / 访问内网业务系统

cmd
 
 
 
plink -batch -D 1080 -C -i D:\key\jump.ppk admin@jump-server
 
浏览器代理填写127.0.0.1:1080,全部流量经过 SSH 加密隧道。

七、管道联动 Windows 原生工具(netsh、findstr、tasklist 混合流水线)

示例 1:远程抓取日志过滤错误信息,本地直接检索

cmd
 
 
 
plink -batch root@192.168.1.100 "cat /var/log/nginx/error.log" | findstr "500" > nginx_error.log
 

示例 2:远程服务器端口扫描,本地批量过滤开放端口

cmd
 
 
 
plink -batch root@192.168.1.100 "ss -tuln" | findstr :80
 

八、读取本地多行指令文件批量下发(复杂运维脚本无需拼接长命令 -m

commands.txt
plaintext
 
 
 
systemctl stop nginx
cp /etc/nginx/conf.d/bak.conf /etc/nginx/conf.d/default.conf
systemctl start nginx
systemctl status nginx
 
一行执行全部运维操作:
cmd
 
 
 
plink -batch -no-pty -i server.ppk -m commands.txt root@192.168.1.100
 
-no-pty 消除 ANSI 彩色转义字符,日志干净无乱码。

九、IPv6 纯 IPv6 远程隧道、双栈混合连接(小众机房场景)

IPv6 全局单播连接

cmd
 
 
 
plink -batch root@[2001:db8:1::100] -i D:\key\v6.ppk
 

IPv6 链路本地地址(局域网无公网 IP 设备)

cmd
 
 
 
plink root@[fe80::aabb:ccff:fe11:2233%eth0]
 

十、通过 HTTP/SOCKS 代理穿透内网 SSH(办公网防火墙封锁 22 端口)

SOCKS5 代理跳板连接服务器

cmd
 
 
 
plink -batch -proxy socks5://127.0.0.1:7890 root@43.xxx.xxx.xxx df -h
 

HTTP 代理穿透

cmd
 
 
 
plink -proxy http://corp-proxy:8080 admin@server-intra
 

十一、无伪终端纯裸指令(数据库、批量采集专用 -no-pty

常规执行命令会附带终端转义符,解析日志干扰,加参数纯净输出:
cmd
 
 
 
plink -batch -no-pty root@192.168.1.100 "mysql -e 'show databases'" > db_list.txt
 

十二、利用 PuTTY 保存会话,一键复用全套复杂配置(隧道、代理、加密、私钥全部预存)

图形 PuTTY 保存会话名IntraTunnel,配置反向隧道、代理、私钥、端口,命令行直接调用无需堆砌参数:
cmd
 
 
 
plink -batch "IntraTunnel"
 

十三、输出完整 SSH 握手调试日志,故障排错专用(底层网络异常定位)

cmd
 
 
 
plink -v -log ssh_debug.log -batch root@192.168.1.100
 
日志包含密钥交换、加密协商、TCP 报文、主机指纹全套底层信息,排查中间人、加密不兼容、握手超时。

十四、远程文件传输替代 sftp(另类管道导出 / 拉取文件,不使用 psftp)

远程文件拉取到本地

cmd
 
 
 
plink -batch root@192.168.1.100 "cat /data/backup.sql" > local_backup.sql
 

本地文件推送远程

cmd
 
 
 
type local_config.conf | plink -batch root@192.168.1.100 "cat > /etc/app/config.conf"
 

十五、多服务器并行批量巡检(PowerShell 多线程另类批量)

powershell
 
 
 
$keys = "D:\ssh\server.ppk"
$hosts = @("192.168.1.10","192.168.1.11","192.168.1.12")
$jobs = @()
foreach($h in $hosts){
    $jobs += Start-Job -ScriptBlock {
        plink -batch -l root -i $using:keys $using:h "hostname; uptime; df -h"
    }
}
Wait-Job $jobs
Receive-Job $jobs
 
多台服务器同时执行巡检,大幅缩短批量耗时。

十六、特殊避坑另类参数组合(解决生产常见异常)

  1. 高延迟网络防断开:添加 -w 30 30 秒超时、-C 压缩
cmd
 
 
 
plink -batch -w 30 -C -i priv.ppk root@slow-server
 
  1. 老旧设备加密算法不兼容,强制指定弱兼容加密套件
cmd
 
 
 
plink -batch -c aes128-cbc root@old-firewall
 
  1. 禁止任何交互、强制静默、完全自动化三合一标准模板
cmd
plink -batch -no-pty -hostkey xx:xx:xx user@host 指令

补充 plink.exe 小众、特殊、非常规高阶另类示例

一、无私钥无密码:GSSAPI Kerberos 域免登(企业域环境冷门用法)

域控环境加入 AD 域,服务器开启 Kerberos 认证,无需私钥、无需密码直接登录,脚本零凭证:
cmd
 
 
 
:: 自动使用当前Windows登录域账号Kerberos认证
plink -batch -agent root@linux-ad-server
 
配套:域内批量巡检,完全不存储任何账号凭证,等保合规。

二、隧道复用:一条 SSH 连接同时开正向 + 反向 + SOCKS 三层隧道复合

单 TCP 链路复用多路 SSH 通道,同时实现内网访问、外网代理、本地服务暴露:
cmd
 
 
 
:: -L 内网数据库直达本地 / -R 本地网站暴露公网 / -D 全局SOCKS代理
plink -batch -C -L 3306:127.0.0.1:3306 -R 8090:127.0.0.1:80 -D 1080 -i D:\key\jump.ppk admin@gateway
 
单连接同时满足数据库管理、内网穿透、代理上网。

三、标准输入持续流式交互(长会话实时数据流采集)

不一次性执行单命令,持续向远程 stdin 写入指令,实时读取输出,做实时监控:

monitor.txt(循环下发监控指令)

bash
 
运行
 
 
while true; do sleep 1; df -h; done
 
cmd
 
 
 
:: 持续实时输出服务器磁盘状态,本地实时打印
type monitor.txt | plink -batch -no-pty root@192.168.1.100
 

四、嵌套 SSH 跳板(plink 套 plink,双层跳板穿透隔离内网)

本地 Windows → 跳板机 A → 隔离内网 B,无需在跳板机安装任何工具:
cmd
 
 
 
:: 外层连接跳板机,内层直接在内网机器执行命令
plink -batch -i jump.ppk admin@jump "plink -batch -i /tmp/internal.key root@192.168.5.200 df -h"
 
跳板无存放私钥风险,私钥仅保存在本地 Windows。

五、禁用主机密钥校验(测试内网机房专用,仅隔离测试环境)

⚠️ 生产环境严禁使用,仅内网测试机房批量自动化临时使用,跳过指纹校验:
cmd
 
 
 
:: 配合注册表清空HostKeys,临时免指纹校验
plink -batch -hostkey * root@test-server uptime
 

六、纯后台静默执行,不输出任何控制台文本(日志全写入文件)

屏蔽 stdout/stderr 控制台打印,所有握手、命令输出、错误全部落地日志,无任何弹窗、无黑框输出干扰:
cmd
 
 
 
plink -batch -log full_log.txt -no-pty root@192.168.1.100 "systemctl restart nginx" >nul 2>&1
 

七、串口 + SSH 混合自动化(机房交换机 + 服务器一体化运维)

脚本先串口下发交换机配置,再 SSH 批量巡检服务器,一条批处理完成机房全设备运维:
batch
 
 
 
@echo off
:: 1. 串口COM4配置交换机
plink -ser COM4 -speed 115200 < switch_config.txt > switch_log.txt
:: 2. SSH巡检所有业务服务器
plink -batch -i server.ppk root@192.168.1.100 uptime >> server_log.txt
 

八、自定义 KEX / 加密 / HMAC 算法,适配老旧嵌入式设备

老旧工业 Linux、防火墙仅支持过时加密套件,强制指定兼容算法规避握手失败:
cmd
 
 
 
:: 强制指定密钥交换、对称加密、完整性算法
plink -batch -k diffie-hellman-group1-sha1 -c 3des-cbc -hmac sha1 root@old-iot-device
 

九、长连接保活隧道(心跳防断,无循环脚本,依靠 SSH 原生保活参数)

不用批处理循环重试,依靠 SSH 层心跳包维持反向隧道,减少进程频繁销毁重建开销:
cmd
 
 
 
:: 30秒心跳包探测链路断开,自动维持隧道长连接
plink -batch -R 9090:127.0.0.1:80 -w 30 -i priv.ppk root@gateway
 

十、读取环境变量作为私钥路径(CI/CD 流水线无硬编码密钥)

流水线、Jenkins 自动化场景,密钥路径写入环境变量,脚本不硬编码文件地址:
batch
 
 
 
:: %SSH_PRIVATE_KEY% 由CI系统注入环境变量
plink -batch -i %SSH_PRIVATE_KEY% root@build-server ./build.sh
 

十一、多参数日志分级:握手调试日志 + 业务输出日志分离

SSH 底层握手调试日志单独存 debug.log,业务命令输出单独存 result.log,分开排查网络与业务故障:
cmd
 
 
 
plink -batch -v -log debug_handshake.log root@192.168.1.100 "free -h" > result.log
 

十二、反向文件推送:远程覆盖本地文件(另类反向传输)

常规是本地推远程,反向将服务器文件覆盖本地文件,用于同步配置模板:
cmd
 
 
 
:: 远程服务端文件覆盖本地Windows文件
plink root@192.168.1.100 "cat /opt/template.ini" > D:\config\local_template.ini
 

十三、IPv6 链路本地地址 + 网卡索引 穿透局域网无路由设备

局域网仅 IPv6 链路本地互通,必须携带网卡索引%标识网卡,常规工具极易踩坑:
cmd
 
 
 
:: %eth0 指定本地网卡,访问链路本地IPv6设备
plink -batch root@[fe80::1a2b:3cff:fe44:5566%eth0] -i D:\key\v6.ppk
 

十四、Pageant 多密钥自动轮换 + 后台隧道组合

Pageant 加载多台服务器不同私钥,隧道脚本无需指定-i,自动匹配对应主机密钥,多隧道并行运行互不冲突:
  1. Pageant 导入 server1.ppk、server2.ppk;
  2. 双反向隧道后台启动,无私钥路径参数:
cmd
 
 
 
start /min plink -batch -R 8081:127.0.0.1:80 root@gateway01
start /min plink -batch -R 8082:127.0.0.1:80 root@gateway02
 
start /min最小化控制台窗口,后台静默运行。

十五、管道过滤 SSH 握手垃圾输出,仅保留业务执行结果

过滤掉 SSH 版本协商、密钥交换、主机指纹等调试输出,只提取远程命令有效返回内容:
cmd
 
 
 
plink -batch -v root@192.168.1.100 df -h | findstr /v "SSH-2.0\|Host key" > clean_result.txt
 

十六、交互式 shell 定时任务(特殊场景:需要终端交互的老旧工具)

部分运维工具必须分配伪终端才能运行,强制开启-t持续终端,定时脚本执行交互式工具:
cmd
 
 
 
:: -t 强制分配PTY伪终端,适配需要终端交互的老旧运维脚本
plink -batch -t root@server "source /etc/profile; old_monitor_tool"
 

十七、HTTP CONNECT 代理穿透公司防火墙(封锁 22 端口场景)

办公环境防火墙屏蔽 22 端口,走 80 端口 HTTP 代理隧道连接外网 SSH 服务器:
cmd
 
 
 
plink -batch -proxy http://corp-proxy.company.com:8080 root@47.xxx.xxx.xxx
 

十八、批量销毁远程进程(运维应急批量杀进程)

PowerShell 批量连接多服务器,一键杀掉占用 CPU 高的异常进程:
powershell
 
 
 
$servers = @("192.168.1.10","192.168.1.11")
foreach($h in $servers){
    plink -batch -l root -i key.ppk $h "ps aux | grep java | awk '{print `$2}' | xargs kill -9"
}
 

十九、UTF-8 中文日志兼容组合参数(解决中文乱码)

Windows 控制台编码与 Linux 服务端编码不一致,组合参数消除中文日志乱码:
cmd
 
 
 
:: -no-pty 关闭终端转义字符,避免中文ANSI编码错乱
plink -batch -no-pty root@server "cat /var/log/app.log" > utf8_log.txt
 

二十、空指令仅维持隧道(纯转发无业务命令,后台永久穿透)

不执行任何远程命令,仅保持隧道转发能力,专门用于内网穿透常驻进程:
cmd
 
 
 
:: 末尾不追加任何远程指令,仅维持反向隧道长连接
plink -batch -R 9090:127.0.0.1:80 -i priv.ppk root@gateway

 


plink.exe 是 PuTTY 工具集中的一个命令行工具,用于通过 SSH(安全外壳协议)进行远程连接。它通常用于在没有图形界面的情况下实现 SSH 连接,适合脚本和自动化任务。

在使用 plink.exe 时,你可以执行以下操作:

  • 连接到远程服务器:通过命令行指定用户名和主机地址。
  • 执行远程命令:可以直接在连接时指定要执行的命令。
  • 支持公钥认证:可以配置密钥文件以增强安全性。

例如,基本的用法格式如下:

bashCopy Code
plink.exe username@hostname

这会尝试连接到指定的主机并以给定的用户名登录。


plink.exe 是由 PuTTY 项目开发的一个工具。PuTTY 是一个开源的 SSH 和 Telnet 客户端,最初由 Simon Tatham 在 1998 年创建。该项目提供了一系列用于网络连接的工具,其中包括 plink.exe,主要用于在命令行环境中进行 SSH 连接。

起源和发展

  1. PuTTY 的创建:PuTTY 最初是为了满足对安全远程访问的需求而开发的。随着互联网的普及,SSH 成为一种常用的安全协议。

  2. 命令行工具plink.exe 被设计为 PuTTY 的命令行界面工具,允许用户在没有图形界面的情况下通过 SSH 连接到远程服务器。

  3. 功能扩展:除了基本的 SSH 连接功能外,plink.exe 还支持端口转发、脚本自动化等功能,使其在系统管理和自动化任务中非常有用。

  4. 广泛应用:由于其开源特性和灵活性,plink.exe 被广泛应用于各种操作系统环境,特别是在 Windows 系统上。

 plink.exe 是为了满足安全远程连接需求而发展而来的,其背后的 PuTTY 项目在网络安全领域具有重要影响。


PuTTY 是一款免费、开源、轻量级的远程连接工具,主要用于 SSH、Telnet、Rlogin、Serial(串口)等协议 的客户端连接。它最初由 Simon Tatham 开发,广泛用于 Windows 系统管理 Linux/Unix 服务器。

虽然 PuTTY 本身是一个小型程序,但它实际上是一套工具集合(PuTTY Suite),包含多个组件,各自承担不同功能。以下是截至 2025 年最新版本(通常为 v0.81 或更新)中包含的核心组件及其用途:


✅ PuTTY 工具套件主要组件

组件名称 可执行文件 功能说明
1. PuTTY putty.exe 主程序:图形化 SSH/Telnet 客户端,支持会话保存、密钥认证、X11 转发等
2. PuTTYgen puttygen.exe 密钥生成器:用于生成、转换、管理 SSH 密钥(支持 RSA、ECDSA、Ed25519 等)
• 可导出 OpenSSH 格式私钥
• 可将 .ppk 转为 OpenSSH 格式
3. Pageant pageant.exe SSH 认证代理(Authentication Agent)
• 在后台运行,缓存私钥
• 避免每次连接都输入密码或加载密钥
• 类似 macOS 的 ssh-agent
4. Plink plink.exe 命令行版 PuTTY
• 无图形界面,适合脚本自动化(如批处理、PowerShell)
• 支持 -ssh-batch-m script.txt 等参数
5. PSFTP psftp.exe SFTP 客户端(基于 SSH 的文件传输)
• 类似 sftp 命令,支持 getputlscd 等操作
• 比 WinSCP 更轻量
6. PSCP pscp.exe SCP 文件传输工具(Secure Copy)
• 语法类似 Linux 的 scp
pscp user@host:/file .
• 适合单文件快速上传下载

🔧 其他相关工具(部分需单独下载或集成)

工具 说明
7. PuTTYtel 仅支持 Telnet 和 Rlogin 的简化版(已基本被主程序替代)
8. PuTTY Configuration Exporter(第三方) 用于备份/迁移 PuTTY 会话配置(因会话默认存在注册表)
9. KiTTY(非官方分支) 增强版 PuTTY,支持标签页、自动登录、会话过滤等(非官方,但流行)

📂 配置存储位置(Windows)

  • 会话配置:默认保存在 Windows 注册表 中
    HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions
  • 密钥文件:用户自行保存为 .ppk 文件(建议加密保护)
  • 日志/回话记录:可手动启用日志功能,保存为文本或原始日志

⚠️ 注意:重装系统或迁移时,需导出会话(可用 reg export)或使用第三方工具备份。


🔐 安全建议(2025年)

  1. 优先使用 SSH 而非 Telnet(Telnet 明文传输,不安全);
  2. 禁用 SSH-1 协议(PuTTY 默认已关闭);
  3. 使用 Ed25519 或 RSA 3072+ 密钥,避免弱算法(如 DSA);
  4. 不要在 Pageant 中加载未加密私钥
  5. 从官网下载https://www.chiark.greenend.org.uk/~sgtatham/putty/
    (警惕第三方修改版携带后门)

💡 替代方案参考(现代场景)

场景 推荐工具
图形化 SSH + SFTP MobaXtermTabbyWindTerm
命令行自动化 OpenSSH for Windows(Win10/11 内置)
跨平台 TermiusElecterm(基于 Electron)

但 PuTTY 因其极简、稳定、无需安装,仍在运维、嵌入式调试、工业控制等领域广泛使用。


✅ 总结

PuTTY 不只是一个程序,而是一个完整的远程访问工具集,核心六件套为:

PuTTY(连接) + PuTTYgen(密钥) + Pageant(代理) + Plink(脚本) + PSFTP/PSCP(传文件)

掌握这六个组件,即可高效、安全地完成绝大多数远程管理与自动化任务。

📥 官网下载地址:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html


plink.exe 的发展可以分为几个阶段,反映了其随着技术进步和用户需求变化而演变的过程:

1. 初始开发阶段

  • 1998 年:PuTTY 项目开始,由 Simon Tatham 开发。最初旨在提供一个轻量级的 SSH 和 Telnet 客户端,以满足安全远程访问的需求。
  • 推出 plink.exe:作为 PuTTY 套件的一部分,plink.exe 被引入,专注于命令行界面的 SSH 连接。

2. 功能扩展阶段

  • 2000 年代早期:随着 SSH 协议的普及,plink.exe 增加了对更多功能的支持,如端口转发和身份验证方式(如密钥认证)。
  • 脚本支持:用户开始利用 plink.exe 进行自动化脚本的编写,以简化远程操作。

3. 跨平台适应阶段

  • 2000 年代中期:虽然主要用于 Windows,但 PuTTY 和 plink.exe 开始支持其他操作系统,增加了跨平台的灵活性。
  • 开源社区的贡献:由于其开源性质,社区对 PuTTY 及其组件的贡献使得 plink.exe 得到不断改进。

4. 现代化与安全性增强阶段

  • 2010 年代:随着网络安全威胁的增加,plink.exe 加强了安全特性,包括对新型加密算法和协议版本的支持。
  • 用户界面与体验优化:尽管 plink.exe 是命令行工具,其文档和使用指南也得到了改善,以帮助用户更好地利用其功能。

5. 持续更新与维护阶段

  • 2020 年至今:PuTTY 和 plink.exe 继续接受定期更新,修复漏洞,提升性能,并保持对新技术的兼容性。
  • 社区支持:随着云计算和 DevOps 的兴起,plink.exe 在自动化和远程管理中的应用仍然广泛,持续获得用户的支持和反馈。

 plink.exe 的发展反映了远程访问技术的演变与网络安全需求的变化,依然是系统管理员和开发人员的重要工具之一。


PuTTY 在 Windows 系统中默认将所有会话配置、全局设置和密钥缓存信息存储在注册表(Registry)中,而非配置文件。这是其轻量级设计的一部分,但也带来迁移、备份和安全审计的挑战。

以下是 PuTTY 相关注册表路径及关键内容详解(适用于 PuTTY 0.70–0.81+ 版本,截至 2025 年):


🔑 一、主要注册表路径

1. 用户会话配置(最常用)

text
编辑
 
 
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions
  • 说明:每个保存的会话(Session)在此下以子项(Key)形式存在。
  • 示例
    text
    编辑
     
     
    Sessions\
      ├── MyServer1
      ├── AWS-Prod
      └── Router-Serial
  • 每个会话包含的典型值(Value):
    值名称 类型 说明
    HostName REG_SZ 主机IP或域名
    PortNumber REG_DWORD 端口号(如 22)
    Protocol REG_SZ 协议("ssh", "telnet", "serial" 等)
    UserName REG_SZ 自动填充的用户名(可选)
    PublicKeyFile REG_SZ 关联的 .ppk 私钥路径
    LogFileName REG_SZ 日志文件路径(若启用)
    TerminalType REG_SZ 终端类型(如 "xterm")
    WinTitle REG_SZ 窗口标题
    ConnectionSharing REG_DWORD 是否启用连接共享

⚠️ 注意:密码不会明文存储!PuTTY 出于安全考虑从不保存登录密码(但可能保存用户名)。


2. 全局默认设置

text
编辑
 
 
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
  • 包含未分配到具体会话的全局参数,例如:
    • DefaultSettings:新建会话时的默认模板
    • SSH Host Keys:已接受的服务器公钥(防中间人攻击)
    • Randseed:随机数种子(用于加密)

关键子项:

  • SSH Host Keys
    存储格式:rsa2@22:example.com = <base64-encoded key>
    → 相当于 OpenSSH 的 ~/.ssh/known_hosts

  • Default Settings
    所有新建会话继承此处配置,修改后影响“Default Settings”模板。


3. Pageant(SSH 代理)相关

Pageant 本身不写入注册表,但:

  • 它加载的私钥列表仅存在于内存中
  • 若通过脚本启动 Pageant 并自动加载密钥,密钥路径可能出现在任务计划程序启动项注册表中:
    text
    编辑
     
     
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

🛠 二、实用操作:备份、迁移与清理

✅ 1. 备份所有 PuTTY 会话

cmd
编辑
 
 
reg export "HKCU\Software\SimonTatham\PuTTY" putty_backup.reg
  • 将导出文件复制到新电脑,双击导入即可恢复全部会话。

✅ 2. 批量删除会话

  • 删除整个 Sessions 项即可清空所有保存的连接:
    cmd
    编辑
     
     
    reg delete "HKCU\Software\SimonTatham\PuTTY\Sessions" /f

✅ 3. 导出单个会话

  • 在 regedit 中右键点击会话名(如 MyServer1)→ “导出”。

🔒 三、安全与审计注意事项

风险点 建议
会话中保存用户名 + 密钥路径 可能泄露目标系统身份和密钥位置
SSH Host Keys 泄露 攻击者可分析你连接过哪些服务器
注册表残留 即使卸载 PuTTY,注册表数据仍保留
自动登录配置 若结合 Plink 脚本使用,可能硬编码凭证

最佳实践

  • 敏感环境使用 “一次性会话”(不保存);
  • 定期清理不用的会话;
  • 使用 非默认用户名,避免暴露账户;
  • 不在会话中指定私钥路径,改用手动选择或 Pageant。

🔄 四、与其他工具对比

工具 配置存储方式
PuTTY Windows 注册表(HKCU\...\PuTTY
KiTTY(PuTTY 分支) 可选注册表或 kitty.ini 文件
MobaXterm %UserProfile%\Documents\MobaXterm 下的 .ini 和 .session 文件
OpenSSH for Windows ~/.ssh/config(文本文件,跨平台友好)

💡 提示:若需版本控制或跨平台同步,建议改用 OpenSSH 或支持配置文件的终端工具。


✅ 总结:PuTTY 注册表核心路径速查

用途 注册表路径
查看/编辑所有会话 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions
查看已知主机公钥 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SSH Host Keys
修改默认设置 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Default Settings
完整备份 导出整个 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY

📌 重要提醒
操作注册表前请先备份文件 → 导出),误删可能导致 PuTTY 配置丢失!

通过理解这些注册表结构,你可以更高效地管理、迁移或审计 PuTTY 的使用,尤其在企业运维或安全合规场景中至关重要。


plink.exe 的功能可以根据不同的使用场景进行分类,主要包括以下几类:

1. 远程登录

  • 通过 SSH 协议连接到远程服务器,允许用户在命令行界面下进行操作。

2. 执行远程命令

  • 在连接时直接指定要在远程主机上执行的命令,适合快速操作和脚本化任务。

3. 端口转发

  • 支持 SSH 隧道,可以将本地端口或远程端口转发到其他地址和端口,实现安全的数据传输。

4. 批处理和自动化

  • 可以在脚本中使用,支持在不需要交互的情况下执行命令,非常适合自动化任务。

5. 公钥认证支持

  • 支持使用公钥进行身份验证,提高安全性。

6. 与其他工具集成

  • 可以与其他 PuTTY 工具(如 pscpputtygen)配合使用,实现更复杂的操作。

这些功能使得 plink.exe 成为一个灵活且强大的命令行工具,适合各种远程管理和自动化任务。


plink.exe 的底层原理主要基于以下几个关键概念和技术:

1. SSH 协议

  • plink.exe 使用 SSH(Secure Shell)协议来建立安全的远程连接。SSH 提供加密的通信通道,确保数据在传输过程中不被窃取或篡改。

2. 客户端-服务器模型

  • plink.exe 作为客户端,与远程服务器进行通信。它通过发送请求和接收响应,实现命令的执行和数据的传输。

3. 加密和身份验证

  • 在连接过程中,plink.exe 使用公钥和私钥进行身份验证,确保只有经过授权的用户才能访问远程系统。此外,所有传输的数据都经过加密,保证安全性。

4. 网络编程

  • plink.exe 利用 sockets 实现网络通信,通过 TCP/IP 协议与远程主机建立连接。

5. 端口转发

  • 支持本地和远程端口转发功能,通过 SSH 隧道建立安全的连接,可以在不安全的网络中使用安全的方式进行数据传输。

6. 命令行界面

  • plink.exe 采用命令行界面设计,允许用户通过参数和选项来控制其行为,使得其易于集成于各种脚本和自动化任务中。

这些原理共同构成了 plink.exe 的工作机制,使其成为一个强大且灵活的远程访问工具。


plink.exe 的技术细节包括以下几个方面:

1. 协议实现

  • plink.exe 实现了 SSH 协议的各个层面,包括 SSH-1 和 SSH-2。SSH-2 是更为安全和现代的版本,支持更强的加密算法和认证方式。

2. 加密算法

  • 支持多种加密算法,如 AES, Blowfish, 3DES 等,以确保数据传输的安全性。使用公钥加密(如 RSA、DSA)进行身份验证和会话密钥交换。

3. 身份验证机制

  • 支持多种身份验证方式,包括密码认证、公钥认证和基于代理的认证。公钥认证可以使用 SSH 密钥文件进行管理。

4. 端口转发

  • 实现了本地和远程端口转发功能,使得用户能够安全地访问内部网络资源。例如,可以将本地某个端口的流量转发到远程服务器的指定端口。

5. 命令行参数

  • 提供丰富的命令行选项,允许用户自定义连接行为,例如:
    • -ssh 指定使用 SSH 协议。
    • -P 指定端口。
    • -i 指定私钥文件。
    • -t 为终端分配伪终端。

6. 错误处理和调试

  • 内置错误处理机制,能够捕获连接失败、认证失败等问题,并提供相应的错误信息。此外,还支持调试模式,可通过 -v 选项获取详细的调试信息。

7. 脚本集成

  • 由于其命令行特性,plink.exe 很容易与批处理脚本、PowerShell 脚本或其他自动化工具结合使用,适合进行远程任务的自动化管理。

8. Windows 环境兼容

  • plink.exe 是为 Windows 平台设计的,因此它利用 Windows API 来处理文件和网络操作,确保与 Windows 系统的良好兼容性。

这些技术细节使得 plink.exe 成为一个功能强大且灵活的工具,适用于各种远程管理和自动化需求。


plink.exe 的架构主要由以下几个关键组件组成:

1. 用户界面

  • 命令行接口plink.exe 采用命令行方式与用户交互,允许通过命令行参数输入配置选项。

2. SSH 协议栈

  • 协议处理层:实现 SSH-1 和 SSH-2 协议的各个方面,包括握手、密钥交换、加密和数据传输。此层负责处理与服务器之间的通信逻辑。

3. 加密模块

  • 加密算法库:集成多种对称和非对称加密算法,如 AES、RSA、DSA 等,确保数据在传输过程中的安全性。

4. 身份验证模块

  • 认证处理:支持多种身份验证方式,例如密码认证和公钥认证。该模块管理用户的身份验证过程,并确保只有合法用户可以连接。

5. 网络通信层

  • Socket 编程:使用 TCP/IP 协议进行网络通信,负责创建和管理与远程服务器的连接。

6. 端口转发功能

  • 转发控制:实现本地和远程端口转发,使用户能够通过 SSH 隧道安全访问其他服务。

7. 错误处理机制

  • 日志记录:捕获并记录错误信息,提供调试支持,以便用户排查连接和认证过程中可能出现的问题。

8. 脚本和自动化支持

  • 集成 API:允许与脚本和其他工具结合使用,便于用户进行自动化任务管理。

9. 配置管理

  • 设置存储:支持加载和保存用户的连接配置,方便重复使用。

这种架构设计使得 plink.exe 能够高效、安全地实现 SSH 连接和远程管理,同时具备良好的可扩展性和兼容性。


plink.exe 的框架可以分为几个主要部分,确保其功能的完整性和高效性。以下是 plink.exe 的框架结构:

1. 命令行接口

  • 参数解析:处理用户输入的命令行参数,支持多种选项配置,如主机地址、端口、身份验证方式等。

2. 连接管理

  • 会话建立:负责与远程服务器建立 SSH 会话,包括连接初始化、握手和加密协商。
  • 保持连接:处理连接的生命周期,支持心跳机制以维持连接有效性。

3. 协议实现

  • SSH 协议栈:实现 SSH-1 和 SSH-2 协议的核心逻辑,包括:
    • 握手过程:建立安全通道的初始步骤。
    • 密钥交换:确保数据传输的安全性。
    • 数据加密和解密:在传输过程中对数据进行加密和解密。

4. 身份验证模块

  • 认证方式:支持多种身份验证机制(如密码、公钥),并管理认证流程。

5. 数据处理层

  • 输入/输出流:处理数据的读写,包括从标准输入读取命令和将输出发送到标准输出。

6. 端口转发模块

  • 本地和远程转发:实现 SSH 端口转发功能,允许用户安全地转发网络流量。

7. 错误处理与日志记录

  • 错误捕获:处理在连接和数据传输过程中出现的各种错误,并记录相关信息以供调试。

8. 配置管理

  • 参数存储:支持用户保存连接配置,方便后续使用。

9. 脚本和自动化支持

  • API 接口:提供与其他工具或脚本的集成能力,便于实现自动化任务管理。

这种框架设计使得 plink.exe 能够灵活高效地执行 SSH 连接和命令执行,同时确保安全性和稳定性。


plink.exe 是一个命令行工具,主要用于通过 SSH 协议连接远程服务器。以下是一些具体应用场景:

1. 远程命令执行

  • 使用 plink.exe 可以直接在远程服务器上执行命令。例如:
    bashCopy Code
    plink.exe user@hostname "ls -la"
  • 这可以用于快速检查远程系统的状态或执行特定任务。

2. 脚本自动化

  • 可以将 plink.exe 集成到批处理脚本或其他自动化工具中,进行定期任务调度。例如,自动备份文件:
    bashCopy Code
    @echo off
    plink.exe user@hostname "tar -czf backup.tar.gz /path/to/files"

3. 端口转发

  • 支持本地和远程端口转发,使用户能够通过 SSH 隧道安全访问其他服务。例如,将本地端口 8080 转发到远程服务器的 80 端口:
    bashCopy Code
    plink.exe -L 8080:localhost:80 user@hostname

4. 安全文件传输

  • 虽然 plink.exe 本身不支持文件传输,但可以与其他工具(如 pscp.exe)结合使用,实现安全文件传输。

5. 网络诊断

  • 通过 SSH 连接到远程设备并执行网络诊断命令,如 pingtraceroute 等,帮助识别网络问题。

6. 管理多台服务器

  • 可以在多个服务器上同时执行相同的操作,简化管理工作。可以结合循环结构在脚本中实现。

7. 交互式会话

  • 在需要时,可以通过 -t 选项启用伪终端,进行交互式操作:
    bashCopy Code
    plink.exe -t user@hostname

这些应用场景展示了 plink.exe 在远程管理、脚本自动化和安全连接方面的强大功能,适用于系统管理员和开发人员。


plink.exe 在远程管理、脚本自动化和安全连接方面非常实用。以下是一些常见命令示例:

1. 远程管理

使用 plink.exe 连接到远程服务器并执行命令。

bashCopy Code
plink.exe -ssh username@hostname -pw password "ls -la"
  • -ssh:指定使用 SSH 协议。
  • username@hostname:替换为你的用户名和主机名(或 IP 地址)。
  • -pw password:提供密码(不建议在生产环境中使用)。
  • "ls -la":在远程服务器上执行的命令。

2. 脚本自动化

通过脚本批量执行命令,可以将其用于自动化任务。

bashCopy Code
plink.exe -ssh username@hostname -pw password -batch "mkdir new_directory; cd new_directory; touch file.txt"
  • -batch:禁止交互提示,适合脚本使用。
  • 可以在同一条命令中执行多个操作。

3. 安全连接

通过密钥认证进行安全连接。

bashCopy Code
plink.exe -ssh -i path_to_private_key.ppk username@hostname
  • -i path_to_private_key.ppk:指定私钥文件的位置。
  • 使用密钥进行身份验证比使用密码更安全。

4. 端口转发

设置本地端口转发,以便通过 SSH 隧道访问远程服务。

bashCopy Code
plink.exe -ssh -L local_port:remote_host:remote_port username@hostname
  • -L local_port:remote_host:remote_port:设置本地端口转发,将本地端口映射到远程主机的指定端口。

5. 上传文件

通过 SCP(安全复制)上传文件到远程服务器。

bashCopy Code
pscp.exe -i path_to_private_key.ppk local_file username@hostname:/remote_directory/
  • pscp.exe 是 PuTTY 套件中的 SCP 工具,类似于 plink.exe

6. 下载文件

通过 SCP 下载远程文件到本地。

bashCopy Code
pscp.exe -i path_to_private_key.ppk username@hostname:/remote_file local_directory/

这些示例展示了 plink.exe 在远程管理、脚本自动化和安全连接中的强大功能。根据实际需求,可以组合使用这些命令以实现更复杂的操作。


7. 执行多条命令

如果需要在一次连接中执行多条命令,可以用分号将它们串联。

bashCopy Code
plink.exe -ssh username@hostname -pw password "cd /var/www; git pull; systemctl restart apache2"
  • 上述命令将进入指定目录,拉取最新的代码,并重启 Apache 服务。

8. 使用配置文件

可以在 PuTTY 中设置会话配置,然后通过 plink.exe 直接调用。

bashCopy Code
plink.exe -load "MySavedSession"
  • 这里的 "MySavedSession" 是在 PuTTY 中保存的会话名称,避免每次都输入详细信息。

9. 环境变量转发

如果需要在远程会话中保留本地环境变量,可以使用 -X 选项(需确保 SSH 服务器支持)。

bashCopy Code
plink.exe -ssh -X username@hostname

10. 监控命令执行输出

将远程命令的输出记录到本地文件中。

bashCopy Code
plink.exe -ssh username@hostname -pw password "dmesg" > local_output.txt
  • 这将执行远程的 dmesg 命令,并将输出保存到本地文件 local_output.txt

11. 保持连接活跃

在某些情况下,SSH 连接可能会因长时间无活动而断开。可以使用 -o ServerAliveInterval 选项。

bashCopy Code
plink.exe -ssh -o ServerAliveInterval=60 username@hostname
  • 每 60 秒发送一个信号以保持连接活跃。

12. 使用代理

如果要通过 SOCKS 代理连接到远程服务器,可以使用以下命令:

bashCopy Code
plink.exe -D 1080 username@hostname
  • 这将在本地创建一个 SOCKS 代理,端口为 1080。

13. SSH 代理转发

如果需要在远程服务器上使用本地的 SSH 密钥,你可以启用 SSH 代理转发。

bashCopy Code
plink.exe -ssh -A username@hostname
  • 使用 -A 选项来启用代理转发。

14. 批处理文件

可以将多个 plink.exe 命令放入批处理文件中,方便批量执行。

Copy Code
@echo off
plink.exe -ssh username@hostname -pw password "command1"
plink.exe -ssh username@hostname -pw password "command2"
  • 将上述内容保存为 .bat 文件,双击运行即可。

15. 使用日志记录

记录所有的输出,便于后续审计和调试。

bashCopy Code
plink.exe -ssh username@hostname -pw password "uptime" -v > log.txt
  • -v 选项用于启用详细模式,有助于调试。

16. 文件传输

可以使用 pscp.exe(PuTTY 的文件复制工具)来传输文件。与 plink.exe 类似,命令格式如下:

bashCopy Code
pscp.exe -pw password localfile.txt username@hostname:/remote/path/
  • 这条命令将本地的 localfile.txt 文件复制到远程服务器的指定路径。

17. 使用密钥进行身份验证

如果不想使用密码,可以通过密钥文件进行身份验证。需要指定密钥文件的路径:

bashCopy Code
plink.exe -ssh -i C:\path\to\privatekey.ppk username@hostname

18. SSH 隧道

使用 plink.exe 创建 SSH 隧道,将本地端口转发到远程主机。

bashCopy Code
plink.exe -L 8080:localhost:80 username@hostname
  • 这将把本地的 8080 端口转发到远程主机的 80 端口,可以在本地访问远程服务。

19. 执行脚本

可以在远程服务器上执行一个脚本文件。

bashCopy Code
plink.exe -ssh username@hostname -pw password "bash ~/script.sh"
  • 这将执行位于用户主目录下的 script.sh 脚本。

20. 设置超时

为防止连接因长时间空闲而断开,可以设置超时参数:

bashCopy Code
plink.exe -ssh -o ConnectTimeout=10 username@hostname
  • 这里的 10 表示在 10 秒后超时。

21. 调试模式

使用 -v 选项启用调试模式,以便获取连接的详细信息。

bashCopy Code
plink.exe -ssh -v username@hostname

22. 连接多个服务器

可以在批处理脚本中连接多个服务器,自动化管理。

Copy Code
@echo off
for %%i in (server1 server2 server3) do (
    plink.exe -ssh username@%%i -pw password "uptime"
)
  • 以上代码将依次连接到 server1server2 和 server3,并执行 uptime 命令。

23. 指定字符集

在某些情况下,可能需要指定字符集以正确显示输出。

bashCopy Code
plink.exe -ssh username@hostname -pw password -m command.txt -C
  • -C 选项启用压缩,适用于带宽有限的情况。

24. 使用命令行参数

可以在命令行中传递自定义参数,允许灵活配置。

bashCopy Code
plink.exe -ssh username@hostname -pw password -m commands.txt -t
  • -t 选项强制分配伪终端,有助于执行某些需要交互的命令。

25. 定时任务

结合 Windows 的任务计划程序,定期执行某些命令或脚本。

bashCopy Code
schtasks /create /tn "MyTask" /tr "C:\path\to\your_script.bat" /sc daily /st 10:00
  • 该命令会每日 10:00 执行指定的批处理脚本。

26. 环境变量配置

你可以在 plink.exe 中设置环境变量,以便在远程会话中使用。

bashCopy Code
plink.exe -ssh username@hostname -pw password "export VAR_NAME=value; echo \$VAR_NAME"

27. 批量执行命令

如果需要在多个主机上执行相同的命令,可以将命令写入文件并使用循环。

Copy Code
@echo off
for %%i in (server1 server2 server3) do (
    plink.exe -ssh username@%%i -pw password < commands.txt
)

28. 输出重定向

可以将命令的输出重定向到本地文件中,方便后续查看。

bashCopy Code
plink.exe -ssh username@hostname -pw password "ls -l" > output.txt

29. 保持会话活动

为了避免超时断开,可以定期发送心跳信号。

bashCopy Code
while true; do echo ""; sleep 60; done | plink.exe -ssh username@hostname -pw password

30. 使用代理

如果需要通过 HTTP/SOCKS 代理连接,可以使用 -proxy 选项。

bashCopy Code
plink.exe -ssh -proxycmd "proxy_command" username@hostname

31. 使用交互模式

如果需要与远程主机进行交互,使用 -t 选项分配伪终端。

bashCopy Code
plink.exe -ssh -t username@hostname -pw password

32. 执行多条命令

可以通过分号将多条命令组合在一起执行。

bashCopy Code
plink.exe -ssh username@hostname -pw password "cd /var/www; ls -l; exit"

33. 连接到指定端口

若远程服务器的 SSH 服务不在默认端口(22),可以指定该端口。

bashCopy Code
plink.exe -ssh -P 2222 username@hostname -pw password

34. 检查连接状态

可以通过 plink.exe 检查服务器的连接状态。

bashCopy Code
plink.exe -ssh username@hostname -pw password "echo 'Connected'"

35. 使用不同的身份验证方法

可以尝试不同的身份验证方法,增加安全性。

bashCopy Code
plink.exe -ssh -i C:\path\to\key.ppk username@hostname

36. 使用 -m 参数从文件执行命令

将要执行的命令放入文件中,通过 -m 参数读取。

bashCopy Code
plink.exe -ssh username@hostname -pw password -m commands.txt

37. 设置日志记录

可以将会话的输出记录到日志文件,方便后续分析。

bashCopy Code
plink.exe -ssh username@hostname -pw password > session.log

38. 使用 timeout

如果不想等待命令执行完毕,可以设置超时。

bashCopy Code
plink.exe -ssh username@hostname -pw password "command" | timeout 10

39. 通过 SSH 密钥自动登录

将密钥添加到 SSH 代理,使得登录更为便捷。

bashCopy Code
pageant.exe C:\path\to\key.ppk
plink.exe -ssh username@hostname

40. 安装和使用 plink.exe

确保在计算机上正确安装 PuTTY,并将 plink.exe 添加到系统路径中,方便在任何目录下运行。


 

posted @ 2024-09-27 16:25  suv789  阅读(2859)  评论(0)    收藏  举报