PuTTY
定义
PuTTY 是一个自由开源的终端仿真程序,兼具串口控制台与网络文件传输功能,可作为 SSH、Telnet、rlogin 及原始 TCP 协议的客户端[1]。它以单个可执行文件的形式分发,在 Windows 平台上无需安装即可运行,这一特征使其便于在临时使用的机器上部署[4]。软件以 C 语言编写,源代码开放,许可方式为 MIT 许可证[5]。
除主程序外,PuTTY 项目还包含若干配套工具:命令行连接工具 Plink、SCP 客户端 pscp、SFTP 客户端 psftp、认证代理 Pageant 以及密钥生成与管理工具 PuTTYgen,另有一个独立的图形终端仿真程序 pterm[6][7]。这些工具共用同一套 SSH 协议实现,可分别用于交互式会话、脚本化远程执行与文件传输。
原理
PuTTY 的工作方式可分为终端仿真与安全传输两层。在终端一侧,它解析并回应 xterm、VT220、VT102 与 ECMA-48 等终端控制序列,把远端程序输出的字符流还原为屏幕上的光标移动、颜色与清屏等效果,从而在本地窗口中呈现一个字符界面[7]。字符集转换层则负责在本地与服务器约定的编码之间转换,用户可指定所期望的字符集以避免显示错乱[8]。
在传输一侧,PuTTY 通过 SSH 协议与服务器协商加密算法、密钥交换方法与消息认证方式,并支持基于公钥的身份认证[7]。为回避早期 Windows 缺乏高质量随机数源的问题,PuTTY 自 2001 年起采用确定性方法生成签名所需的随机值 $k$:以消息与私钥共同作为安全散列的输入,再对结果取模归约,从而在无需系统随机数的前提下得到不可预测的一次性数值[9]。这一做法早于 RFC 6979 对该技术的标准化,其具体实现细节也与该规范不同。
连接建立后,PuTTY 还可在 SSH 通道内实现端口转发与 X11 转发,把本地的图形程序请求或指定端口的流量经加密隧道送至远端[7]。保存的会话配置、主机密钥指纹校验与连接日志等功能,则分别用于复用登录参数、识别服务器身份和留存操作记录[10]。
发展历程
PuTTY 的源头是 1996 年夏季开始编写的一个 Windows 图形界面 Telnet 客户端,作者为其内置了终端仿真功能,最初命名为 STel;当时仅在小范围内分发,尚未公开发布[8]。1998 年夏季,随着所使用系统逐步转向 SSH,作者把该程序改造为带可切换后端的多协议客户端,并实现了 SSH-1 后端,同时将其更名为 PuTTY[8]。
1999 年初,PuTTY 首次被放到网页上供下载,当时只有一个 putty.exe 可执行文件,既没有安装程序也没有手册[8]。英文维基百科将其首次发布记为 1999 年 1 月 8 日[1]。同年中期,有贡献者提交了 scp 实现,pscp 由此产生[8]。
2000 年末,作者受雇机构需在 Windows 上通过 SSH 运行版本控制系统,因此获得数周工作时间用于完善软件,Plink、Pageant、PuTTYgen 三个工具以及 SSH-2 支持均出自这一阶段[8]。到 2000 年 10 月,PuTTY 已成为可用的 SSH-2 客户端。2001 年,X11 转发、TCP 端口转发与 Unicode 支持分别由贡献者加入,2002 年初补充了使用手册[8]。
2005 年 4 月发布的 0.58 版改进了 Unicode 支持,可处理国际字符及从右至左书写和双向文本[11]。2007 年 1 月的 0.59 版增加了串口连接、本地代理等能力[11]。2022 年 10 月 29 日发布的 0.78 版新增对 OpenSSH 证书的支持、新的 SSH 代理模式、用于键盘交互认证的插件机制、NTRU Prime 后量子密钥交换以及 AES-GCM 加密方式[12]。2024 年 4 月 15 日发布的 0.81 版修复了一个涉及 521 位 ECDSA 密钥的严重漏洞[2]。0.83 版增加了对 ML-KEM 后量子密钥交换算法的支持,0.84 版则修复了若干安全问题并加入连接前执行命令的功能[2]。
应用
PuTTY 最常见的用途是从 Windows 计算机远程登录类 Unix 服务器,在命令行界面中执行管理与开发任务。用户在主界面填写主机名或 IP 地址、选择协议与端口后即可建立会话,并把配置保存为已命名会话以便日后调用。由于默认端口 22 对应 SSH、23 对应 Telnet,端口与协议的选择通常取决于服务器所提供的服务[13]。
在服务器运维之外,PuTTY 也用于嵌入式设备、交换机与路由器等硬件的串口控制台调试,其串口连接能力自 0.59 版起提供[11]。配合 Plink 可以把远程命令写入脚本批量执行,配合 pscp 与 psftp 则能在本地与远端之间传送文件[7]。X11 转发功能使运行 Windows 图形环境的用户能够把远端 X 客户端程序显示在本地[8]。
PuTTY 已被大量操作系统与软件仓库收录,其中包括 Debian、Fedora、Arch、macOS 上的 MacPorts、Homebrew,以及 Windows 上的 Chocolatey、Scoop 等包管理器,也有第三方制作的免安装便携版本[3][4]。Unix 平台的移植版提供了灵活的终端设置与连接过程中的重新配置能力[5]。
局限
PuTTY 主程序本身不提供会话标签页,多个连接需分别打开独立窗口,用户往往借助第三方外壳程序实现多标签管理[7]。其界面风格与配置方式长期保持原貌,选项卡式浏览、现代化界面等特性并非原生具备[10]。
文件传输不在图形界面内完成,需要另行调用 pscp 或 psftp 命令行工具,这对不熟悉命令行的使用者构成门槛;软件本身既不包含内置的图形化文件传输客户端,也不附带 SSH 服务端[10]。PuTTY 亦不提供脚本语言支持,自动化操作需依赖 Plink 等命令行工具与外部程序配合[7]。
密钥管理方面,PuTTY 使用自有的 PPK 格式保存密钥文件,与其他工具常用的密钥格式不同,需要进行格式转换才能互通[7]。会话长时间空闲可能因超时中断,需在连接设置中启用保活机制以维持链路[14]。
安全性方面,0.68 至 0.80 版在生成 521 位 ECDSA 签名时存在随机值偏置,攻击者获得数十条签名与公钥后即可恢复私钥,该问题编号为 CVE-2024-31497,于 0.81 版修复[9]。该漏洞只影响 521 位 ECDSA 这一种密钥类型,其他长度的 ECDSA 密钥与 Ed25519 等算法均不受影响[9]。此外,Telnet 与 SSH-1 等较早协议本身缺乏足够的加密保护,使用这些协议连接会削弱通信的安全性。
参见
参考资料
- PuTTY [引用日期2026-10-29]
- PuTTY: a free SSH and Telnet client [引用日期2026-10-29]
- putty [引用日期2026-10-29]
- PuTTY Portable | PortableApps.com [引用日期2026-10-29]
- 软件包:putty(0.85-3) [引用日期2026-10-29]
- SUSE Package Hub [引用日期2026-10-29]
- PuTTY [引用日期2026-10-29]
- History of PuTTY's development [引用日期2026-10-29]
- PuTTY vulnerability vuln-p521-bias [引用日期2026-10-29]
- How to choose a SSH client for Windows [引用日期2026-10-29]
- PuTTY [引用日期2026-10-29]
- pkgsrc-public: Changelog [引用日期2026-10-29]
- putty(Simon Tatham开发软件)_百度百科 [引用日期2026-10-29]
- SSH远程连接服务器工具盘点 [引用日期2026-10-29]