news 2026/10/14 16:38:47

KiTTY 深度解析:基于 PuTTY 0.76 的 Windows SSH/Telnet 客户端增强实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KiTTY 深度解析:基于 PuTTY 0.76 的 Windows SSH/Telnet 客户端增强实践
  • 通信
  • 网络

【免费下载链接】KiTTY

:computer: KiTTY, a free telnet/ssh client for Windows

项目地址:https://gitcode.com/gh_mirrors/kit/KiTTY
点击查看免费下载

本文围绕 KiTTY 官方 README 展开,先讲清 KiTTY 作为 PuTTY 0.76 分支的定位与完整功能版图,再结合仓库源码逐一印证各功能的实现落点(编译开关、命令行选项、kitty.ini配置、密码加密、会话启动器等),最后给出可直接复制的 MSYS/MinGW32 与 Docker 交叉编译流程。读完本文,你将能完整评估 KiTTY 相对于原生 PuTTY 的增强点、定位每个功能在源码中的位置,并独立从源码构建出putty.exe(KiTTY)。

KiTTY 是什么

根据 README 的定义:KiTTY 是基于 PuTTY 0.76 版本的分支(fork),仅面向 Microsoft Windows 平台设计。它完整保留了 PuTTY 原有的 Telnet、SSH、RLogin、RAW 等全部后端能力,在此之上叠加了大量增强功能。当前仓库的 Git 标签为Tagging the 0.76.1.13 release of the KiTTY project.,即本源码树对应 0.76.1.13 版本线。

从源码结构看,KiTTY 的增强能力集中在两层:

  • 仓库根目录的kitty_*.c文件族:kitty.c(约 5700 行的增强主逻辑)、kitty_commun.c(端口模式/公共状态)、kitty_crypt.c(密码加密)、kitty_settings.c(配置对话框增强)、kitty_launcher.c(会话启动器)、kitty_registry.c(注册表存取)、kitty_store.c、kitty_tools.c、kitty_win.c(托盘/窗口管理)等;
  • 若干独立模块目录:base64/、bcrypt/、blocnote/(内置文本编辑器)、cthelper/(Cygwin 包装器)、url/(超链接)、rutty/(脚本引擎)、zmodem/(ZModem 传文件)、adb/(ADB 支持)、far2l/(编解码)。

这些源文件通过 0.76_My_PuTTY/windows/MAKEFILE.MINGW 中的putty.exe目标链接进最终可执行文件(见下文编译章节),也就是说 KiTTY 与 PuTTY 是同一套构建体系下的“同一份代码 + 增量模块”。

功能版图:README 五大类功能逐一印证

README 将增强功能分为五类,下面按原文脉络逐类展开,并给出每项功能在仓库中的实现证据。

最初应请求而生的功能(The very first requested features)

功能说明仓库实现证据
Sessions filter(会话过滤器)配置框中的会话列表支持按关键字过滤kitty.h 中GetSessionFilterFlag/SetSessionFilterFlag,对应kitty.ini的[ConfigBox] filter=yes
Portability(便携模式)会话配置脱离注册表,存为文件kitty.ini的savemode=dir、fileextension=.ktx;kitty.h 中IniFileFlag、Convert2Dir/ConvertDir2Reg等函数原型
Shortcuts for pre-defined command(预定义命令快捷键)为菜单命令绑定快捷键kitty.h 中ManageShortcuts(...);kitty.ini的[Shortcuts]节
The session launcher(会话启动器)独立的会话选择/启动界面kitty_launcher.c、kitty_launcher.h(RunSession、Launcher_WinMain)
Automatic logon script(自动登录脚本)连接后自动执行本地脚本文件kitty.h 中ReadInitScript、RunScriptFile、ScriptFileContent
Automatic logon script with the RuTTY patch支持 RuTTY 语法(条件、循环、%var%替换)的登录脚本rutty/script.c、rutty/script_win.c;编译开关-DMOD_RUTTY
URL hyperlinks(URL 超链接)终端输出的 URL 可点击跳转url/urlhack.c、url/re_lib/;编译开关-DMOD_HYPERLINK

技术类功能(Technical features)

  • Automatic password(自动密码):会话中可保存 SSH 口令并在连接时自动提交。加密存储由 kitty_crypt.c 实现,其头文件 kitty_crypt.h 声明了cryptstring/decryptstring/cryptpassword/decryptpassword接口,底层依赖 bcrypt/ 模块(nbcrypt.h)。一个值得注意的细节是:0.76_My_PuTTY/windows/MAKEFILE.MINGW 中cmdline.o的编译规则带有-DMASTER_PASSWORD=\cat ../../masterpassword.txt``,即仓库根目录的 masterpassword.txt 会在编译期被内嵌进二进制,作为口令加解密的“主密码”派生输入——这解释了便携分发版为何能跨机器自动解密同一会话保存的口令。
  • Automatic command(自动命令):连接建立后自动向远程发送一段命令(可含\kXX快捷键转义、%var%变量替换)。kitty.h 中AutoCommand、SendAutoCommand、以及延迟参数init_delay/autocommand_delay/between_char_delay都是它的支撑;kitty.ini中initdelay、commanddelay提供全局默认值。
  • Running a locally saved script on a remote session(在远程会话执行本地脚本):对应 kitty.h 的RunScriptFile/OpenAndSendScriptFile,即把本地脚本逐行发送到远程终端执行。

图形类功能(Graphical features)

  • An icon for each session(每会话独立图标):kitty.h 中IconeFlag、IconeNum、SetNewIcon(...);图标库可指向kitty.exe/kitty.dll([KiTTY] iconfile)。
  • Send to tray(发送到托盘):kitty.h 中ManageToTray、DisplaySystemTrayMenu,以及命令行选项-send-to-tray(适合纯 SSH 隧道场景),AutoSendToTray支持连接后自动收进托盘。
  • Transparency(窗口透明):kitty.h 的GetTransparencyFlag/SetTransparencyFlag;kitty.ini的transparency=yes开启,命令行可用-notrans关闭。
  • Protection against unfortunate keyboard input(误触保护):锁定键鼠输入防止误操作生产环境,[KiTTY]保护标志 +ManageProtect(...)。
  • Roll-up(卷帘窗口):把窗口卷到标题栏高度,ManageWinrol+kitty.ini的winrol=yes。
  • Always visible(置顶显示):ManageVisible(...)。
  • Quick start of a duplicate session(快速启动副本会话):以相同会话配置再开一个窗口。
  • Enhanced Configuration Box(增强配置框):更大的会话列表、文件夹树([KiTTY] numberoficons、[ConfigBox] height/dblclick/filter等参数均见 kitty_ini.txt)。

其他功能(Other features)

  • Automatic saving(自动保存):kitty.ini的conf=yes控制默认配置文件的自动创建;SaveCurrentSetting等函数负责落盘。
  • SSH Handler(IE 协议关联):把telnet://、ssh://协议注册给 KiTTY,注册表脚本见 docs/files/kitty_ssh_handler.reg;命令行选项-sshhandler一键创建。
  • pscp.exe 和 WinSCP 集成:kitty.ini中PSCPPath、WinSCPPath、downloaddir配置项;kitty.h 中SendFile、StartWinSCP函数原型;快捷键sendfile(Ctrl+F3)、getfile(Ctrl+F4)、winscp(Shift+F3)。
  • Binary compression(二进制压缩):针对压缩算法/编码的增强处理,配合 base64/ 等工具模块。
  • Clipboard printing(剪贴板打印):编译开关-DMOD_PRINTCLIP。
  • Cygwin 和 cmd.exe 集成:cthelper/ 目录(cygterm.c、ptyfork.c等)作为 Cygwin 终端包装器;kitty.ini的cygterm、CtHelperPath配置项。
  • File association(文件关联):.ktx会话文件关联,-fileassoc命令行选项。
  • Other settings / New command-line options:详见下文两节。
  • 此外编译开关中还有-DMOD_PORTKNOCKING(端口敲门)、-DMOD_ADB(ADB,见 adb/adb.c)、-DMOD_ZMODEM(ZModem 文件传输,见 zmodem/winpzmodem.c)、-DMOD_PROXY(代理选择器,见 kitty_proxy.c)、-DMOD_FAR2L(far2l/ 编解码)、-DMOD_TUTTY(终端增强)等,均可在下文 Makefile 段落中核对。

彩蛋(Bonus)

README 提到“KiTTY 中隐藏着一个轻量聊天服务器和一个隐藏文本编辑器”,源码印证如下:

  • 轻量聊天服务器:kitty.c 的routine_server函数在运行时LoadLibrary动态加载kchat.dll并调用其中的main_m1入口;kitty_light.c 则是一个空的占位源文件(注释说明“Sert juste a reussir la compilation en phase de debug”,即仅为调试期编译通过而存在)。也就是说聊天服务器是以外部 DLL 形式“隐藏”进 KiTTY 的,主体代码并不内联。
  • 隐藏文本编辑器:blocnote/notepad.c 及资源 blocnote/notepad.rc,在 Makefile 中经../../blocnote/notepad.a静态链接进putty.exe,putty.res.o规则中还显式包含../../blocnote/notepad.rc与-DMOD_INTEGRATED_AGENT -DMOD_INTEGRATED_KEYGEN——即内置编辑器、内置 SSH Agent(pageant_integrated.o)、内置密钥生成器(winpgen_integrated.o)也一并整合了。

命令行选项:README 声称的 “New command-line options”

README 把“New command-line options”列为特性之一。完整清单维护在 docs/pages/CommandLine.md,而解析逻辑在 0.76_My_PuTTY/windows/window.c 中一段连续的!strcmp(p, "...")分支(约 L1017–L1318)中实现,两者可相互印证。核心选项摘录:

选项作用
-pass <pwd>设置密码
-auto-store-sshkey不提示直接保存服务器 SSH 主机密钥
-cmd <cmd>定义启动自动命令
-initdelay <sec>首次自动动作(发托盘、自动命令等)前的延迟,默认 2.0 秒
-icon <n>/-iconfile <file>指定内置图标编号或外部图标文件
-loginscript <file>加载登录脚本文件
-launcher启动会话启动器(kitty_launcher.c)
-send-to-tray会话直接启动到系统托盘(适合 SSH 隧道)
-convert-dir/-convert-reg注册表配置与savemode=dir便携目录互转
-folder <f>打开指定文件夹(便携模式,须位于-load之前)
-kload <file>加载.ktx会话文件
-keygen启动内置 SSH 密钥生成器
-runagent启动内置 SSH Agent
-sshhandler创建telnet://、ssh://协议关联
-fileassoc将.ktx文件关联到 KiTTY
-sendcmd向同类名窗口广播一条命令
-classname/-title/-xpos/-ypos/-bgcolor窗口类名、标题、位置、背景色
-nobgimage/-noctrltab/-noicon/-noshortcuts/-notrans/-nozmodem/-norutty/-nofiles/-debug逐项关闭对应增强功能
-putty用单一选项关闭全部 KiTTY 新特性
-help/-version帮助 / 仅打开关于框

注意-putty选项体现了 KiTTY 的设计目标:同一二进制可以退化为“纯 PuTTY”行为,对需要 PuTTY 兼容性的场景非常实用。原生 PuTTY 的全部命令行选项在 KiTTY 中依然有效。

配置系统:kitty.ini 与三大存储模式

KiTTY 的全局配置落在kitty.ini(默认创建于程序目录),仓库根目录的 kitty_ini.txt 就是带完整注释的默认模板,共六个节:

  • [Agent]:askconfirmation(yes/no/auto)、messageonkeyusage——内置 SSH Agent 的私钥使用确认策略;
  • [ConfigBox]:dblclick(open/start)、filter、height、noexit、defaultsettings等,控制增强配置框行为;
  • [KiTTY]:全局总开关,如autoreconnect=yes+ReconnectDelay=5(自动重连,对应-DMOD_RECONNECT与 kitty.h 的AutoreconnectFlag/ReconnectDelay)、hyperlink=yes、icon=yes、transparency=yes、winrol=yes、zmodem=yes、adb=yes、cygterm、pastesize(粘贴字符上限)、sshversion(可伪装 SSH 版本标题,默认PuTTY-KiTTY)、userpasssshnosave(禁止内部保存 SSH 口令)等;
  • [Shortcuts]:为菜单命令绑定快捷键,如script(Ctrl+F2 加载本地脚本远程执行)、sendfile(Ctrl+F3)、getfile(Ctrl+F4)、tray(Ctrl+F6)、protect(Ctrl+F9)、rollup(Ctrl+F12)、editor(Shift+F2 打开内置编辑器)等约 35 项;
  • [Print]:height、maxline=60、maxchar=85——终端缓冲打印排版;
  • [Launcher]:reload=yes——启动器菜单每次重新生成时刷新会话列表。

会话存储模式由savemode决定(kitty_ini.txt L161-L166):

  • registry:存入 Windows 注册表(默认);
  • dir:存为目录结构中的文件(便携模式核心,配合configdir、fileextension=.ktx),并提供-convert-dir/-convert-reg双向迁移命令,源码入口为 kitty.h 中的Convert2Dir/ConvertDir2Reg/Convert2Reg;
  • file:单文件保存(文档标注 currently not maintained)。

docs/files/ 目录还附带kitty_usrcmd.reg(用户命令注册)与kitty_ssh_handler.reg(SSH 协议处理器)等可直接导入的注册表脚本,是“Other settings”与“SSH Handler”两项 README 功能的具体交付物。

如何编译(README 原流程 + 仓库佐证)

README 给出的标准流程

按 README:在 MSYS & MinGW32 环境中进入x.yy_My_PuTTY\windows目录(本仓库对应 0.76_My_PuTTY/windows),执行:

make -f MAKEFILE.MINGW putty.exe

README 还给出了 MSYS/MinGW32 环境安装步骤:安装 mingw-builds 的 GUI 安装包,通过$MinGW\libexec\mingw-get\guimain.exe安装mingw32-developer-tools、mingw32-base、mingw32-gcc-g++、msys-base四个包,然后用$MinGW\msys\1.0\msys.bat打开 SHELL 再编译。

Makefile 中的 KiTTY 专属段落

0.76_My_PuTTY/windows/MAKEFILE.MINGW 的BEGIN MOD_PERSO ... END MOD_PERSO段是 KiTTY 相对 PuTTY 构建的核心差异:

CFLAGS += -DWINVER=0x0501 -D_WIN32_WINDOWS=0x0410 -D_WIN32_WINNT=0x0501 ... CFLAGS += \ -DMOD_WTS \ -DMOD_PERSO \ -DMOD_STARTBUTTON \ -DMOD_SAVEDUMP \ -DMOD_DISABLEALTGR \ -DMOD_KEYMAPPING \ -DMOD_PUTTYX \ -DMOD_PORTKNOCKING \ -DMOD_HYPERLINK \ -DMOD_PRINTCLIP \ -DMOD_LAUNCHER \ -DMOD_RECONNECT \ -DMOD_RUTTY \ -DMOD_TUTTY \ -DMOD_ADB \ -DMOD_BACKGROUNDIMAGE \ -DMOD_ZMODEM \ -DMOD_PROXY \ -DMOD_FAR2L \ ...

每个-DMOD_*宏都对应一个编译期功能开关(WTS 会话支持、快捷键映射、防 AltGr、端口敲门、Rutty 脚本、ADB、背景图、ZModem、代理等),注释行还额外列出了可选项:-DMOD_NOPASSWORD(不可保存口令的版本)、-DMOD_NOTRANSPARENCY(禁透明)、-DMOD_NOHYPERLINK(禁超链接)、-DMOD_PORTABLE(强制便携模式)。putty.exe目标则链接了全部kitty_*.o、urlhack.o、winpzmodem.o、内置 Pageant/Keygen 目标文件以及base64.a、bcrypt.a、notepad.a、libjpeg.a、MD5check.a、mini.a、libregex.a等静态库,并额外-lwtsapi32(会话/托盘增强所需)。想关闭某个功能,删除对应-DMOD_*宏重新编译即可。

现代化的交叉编译方式

仓库官方文档 docs/pages/HowToCompile.md 提供了基于 Docker 交叉编译镜像的更省事方式(免去本地安装 MinGW):

# 32 位 mkdir -p builds 2> /dev/null || rm -f builds/*.exe docker run --rm -it -v $(pwd)/builds:/builds -e USR_UID=$(id -u) -e USR_GID=$(id -g) cyd01/cross-gcc "git clone https://github.com/cyd01/KiTTY.git ; cd KiTTY/0.76b_My_PuTTY/windows ; make -f MAKEFILE.MINGW cross ; cd /builds ; ls -l"

64 位仅需把目标改为make -f MAKEFILE.MINGW cross64。产物kitty.exe等会出现在挂载的builds目录。仓库内另有 .devcontainer/ 配置(devcontainer.json+Dockerfile),基于同一cross-gcc基础镜像构建 VS Code 开发容器,可作为上述 Docker 方案的环境化替代。

版本、许可与适用前提

  • 版本基线:KiTTY fork 自 PuTTY 0.76,本仓库标签为 0.76.1.13;kitty.ini中sshversion默认上报PuTTY-KiTTY,个别服务器若拒绝非标版本字符串,可通过sshversion参数或-title等手段调整。
  • 平台限制:如 README 所强调,KiTTY 仅设计用于 Windows;PuTTY 其他平台版本以其原作者发布为准。
  • 许可:仓库根目录 LICENCE.TXT 随源码分发。
  • 适用前提:本文的编译流程以仓库中0.76_My_PuTTY源码树为准;0.76b_My_PuTTY是另一套目录重组后的变体(crypto/ssh/keygen 等按目录拆分),Docker 官方文档针对的是0.76b_My_PuTTY/windows。

小结

KiTTY 的价值可以用仓库自身结构概括:它没有重写 PuTTY,而是以“同一构建体系 + 编译期功能宏 + 运行时 kitty.ini 配置 + 扩展命令行”三层机制,把会话过滤、便携模式、自动口令/命令、登录脚本(含 RuTTY)、托盘化、透明/卷帘/误触保护、会话启动器、SSH Handler 与 pscp/WinSCP 集成等能力系统性地嫁接到 PuTTY 0.76 之上。README 列出的每项特性都能在 0.76_My_PuTTY/windows/MAKEFILE.MINGW、kitty.h、kitty_ini.txt、docs/pages/CommandLine.md 与kitty_*.c源码族中找到对应实现或配置落点,这也是阅读本仓库源码的最佳索引路径。

  • 通信
  • 网络

【免费下载链接】KiTTY

:computer: KiTTY, a free telnet/ssh client for Windows

项目地址:https://gitcode.com/gh_mirrors/kit/KiTTY
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 16:38:41

批量图片转双层PDF工具:OCR文字层与图像层叠加实现可检索文档

简介&#xff1a;批量图片转双层PDF工具是一款面向办公人员、档案数字化从业者及需要处理扫描文档用户的实用软件&#xff0c;主要解决将大量TIF、JPG等图像文件快速整合为可搜索、可编辑双层PDF的问题。所谓双层PDF&#xff0c;即同时保留原始图像层与可检索文本层&#xff0c…

作者头像 李华
网站建设 2026/10/14 16:38:28

单片机毕设项目:基于STM32的智能大称量体脂秤设计与实现 基于单片机的成人体脂率BMI测量与远程监控装置设计(032503)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/10/14 16:38:00

Apache POI 实现 Word 转 HTML:doc/docx 解析、图片表格与批量转换实践

简介&#xff1a;面向 Java 后端与前端开发者的 Word 转 HTML 示例工程&#xff0c;基于 Apache POI 实现 doc、docx 及 WPS 文档的内容提取与网页展示&#xff0c;解决文档跨平台共享和在线预览需求。资源包共 131 个文件、约 726KB&#xff0c;内含 Java 源码、Spring Boot 启…

作者头像 李华
网站建设 2026/10/14 16:37:46

Matlab读取EDF文件:从头部解析到批量转换的完整指南

简介&#xff1a;这份资源面向需要在Matlab环境中处理生物医学信号的科研人员、工程师与学生&#xff0c;聚焦于EDF&#xff08;European Data Format&#xff09;文件的读取与解析。EDF是心电、脑电等生理信号记录的通用格式&#xff0c;Matlab本身并未内置直接读取函数&#…

作者头像 李华
网站建设 2026/10/14 16:36:23

小白怎么挖SRC?从核心认知到主流平台+通用规则,保姆级教程

小白怎么挖SRC&#xff1f;从核心认知到主流平台通用规则&#xff0c;保姆级教程 如果你正打算踏入网络安全圈&#xff0c;或者想通过挖漏洞尝尝技术的甜头&#xff0c;那SRC&#xff08;安全应急响应中心&#xff09;绝对是你最好的起步点。它不仅能让你在实战里练练手&#…

作者头像 李华