官方版本的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 gmail dot com