2007年8月22日星期三

Putty保存密码,自动登录

Putty保存密码,自动登录
官方版本的putty是不支持保存密码和自动登录的,而且出于安全策略考虑,putty也不打算支持这个特性。
不过我们有时候确实希望有这个特性,特别是在公司内部的开发调试环境里面。SecureCRT对emacs和gdb的支持不够好,putty 又不支持自动登录(有个用key自动登录的办法,太繁琐了,不好用),有点头痛。鱼和熊掌难道不能得兼?

解决办法:自己修改putty,定制一个自己想要的版本。

putty是开源的程序,我们可以从网上下载putty的完整源代码。下载地址为:http://www.tartarus.org/~simon/putty-snapshots/putty-src.zip

压缩包解开之后,修改以下四个文件:putty.h, settings.c, config.c, ssh.c,
仿照 config_tag::username[100]新增一个成员变量 config_tag::password[100]。

以下是修改的难点提示:
1、编译要用VS2003编译,虽然他给出的PUTTY.DSW看起来是VC6的项目。
2、读写配置是在settings.c里面
3、配置页面增加控件的方法:
在config.c里面找个合适的位置添加以下代码
ctrl_editbox(s, "Auto-login password", 'w', 50,
HELPCTX(connection_password),
dlg_stdeditbox_handler, I(offsetof(Config,password)),
I(sizeof(((Config *)0)->password)));
4、"Open"按钮的调用入口
sessionsaver_handler (这个入口和我们想做的修改无关,不过肯定每个看代码的人都想知道)
5、登录过程的入口,这个是我们修改的重点
do_ssh2_authconn
这个函数很变态,看的人要有心理准备。这个函数长达1500行并且反复调用反复折腾。当然有我在,不用担心。找到“Plain old password authentication”,在其后判断一下ssh->cfg.password是否为空。如果不为空就表示读到了以前保存的密码,则用 goto跳转到"Send the password packet."这块注释下面的代码那里。

以上修改提示是给程序员看的。非程序员就免了吧。程序员读者有疑问,或者非程序读者想要定制版exe,都可以给我发邮件:wsq003 at google dot com

没有评论: