- 通信
- 网络
【免费下载链接】KiTTY
:computer: KiTTY, a free telnet/ssh client for Windows
本文围绕 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.exeREADME 还给出了 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
相关推荐
【免费下载】 KiTTY:一款强大的Windows平台Telnet/SSH客户端
KiTTY:一款强大的Windows平台Telnet/SSH客户端 项目基础介绍和主要编程语言 KiTTY是一款基于PuTTY 0.76版本的Windows平台
通信网络WeChatMsg 留痕:免费三步把微信聊天记录导出为 HTML、Word、CSV
WeChatMsg 留痕:免费三步把微信聊天记录导出为 HTML、Word、CSV 微信的聊天记录锁在一个普通用户打不开的本地数据库文件里,官方路径只有整机迁移
KiTTY:Windows平台强大的SSH/Telnet客户端
KiTTY:Windows平台强大的SSH/Telnet客户端 KiTTY是一个基于PuTTY 0.76版本分支开发的开源SSH和Telnet客户端,专为Mic
通信网络
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考