PuTTY

义项:SSH终端客户端
PuTTY

PuTTY 是一款自由开源的终端仿真软件与网络文件传输工具,可作为 SSH、Telnet、rlogin、串口及原始 TCP 连接的客户端使用[1]。它最初为 Windows 编写,由英国程序员 Simon Tatham 主要编写与维护,采用 MIT 许可证发布[2]。在 Windows 系统尚未普遍内置 SSH 客户端的时期,PuTTY 成为许多管理员与开发者远程登录服务器时常用的工具[3]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

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 等较早协议本身缺乏足够的加密保护,使用这些协议连接会削弱通信的安全性。

参见

  • SSH —— PuTTY 最主要支持的远程登录协议,为其加密连接与身份认证的基础。

  • Telnet —— PuTTY 早期即支持的明文远程登录协议。

  • OpenSSH —— 同类的开源 SSH 实现,与 PuTTY 在密钥格式与客户端工具上各有体系。

  • SCP —— PuTTY 通过 pscp 工具支持的文件传输协议。

  • SFTP —— PuTTY 通过 psftp 工具支持的文件传输协议。

  • xterm —— PuTTY 在终端控制序列层面加以模拟的图形终端程序。

参考资料

  1. PuTTY [引用日期2026-10-29]
  2. PuTTY: a free SSH and Telnet client [引用日期2026-10-29]
  3. putty [引用日期2026-10-29]
  4. PuTTY Portable | PortableApps.com [引用日期2026-10-29]
  5. 软件包:putty(0.85-3) [引用日期2026-10-29]
  6. SUSE Package Hub [引用日期2026-10-29]
  7. PuTTY [引用日期2026-10-29]
  8. History of PuTTY's development [引用日期2026-10-29]
  9. PuTTY vulnerability vuln-p521-bias [引用日期2026-10-29]
  10. How to choose a SSH client for Windows [引用日期2026-10-29]
  11. PuTTY [引用日期2026-10-29]
  12. pkgsrc-public: Changelog [引用日期2026-10-29]
  13. putty(Simon Tatham开发软件)_百度百科 [引用日期2026-10-29]
  14. SSH远程连接服务器工具盘点 [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:34:54Z

历史版本

本条目引用的词条
RFC 6979 SSH Telnet OpenSSH SCP SFTP xterm