现在的位置: 首页 > IT运维 > 软件开发 > 正文

让PUTTY保存密码

2013年03月26日 IT运维, 软件开发 ⁄ 共 2126字 暂无评论 ⁄ 被围观 930+

putty是个开源ssh登陆工具,可跨平台编译使用,但是官方版本的putty不支持保存密码和自动登录的,而且出于安全策略考虑,putty也不允许这个功能。

但是我们特别是系统管理员还是很希望putty有这个功能,尤其是在公司内部的开发调试、系统维护环境里面。解决办法:自己修改putty,定制一个我们需要的版本。

官方源码下载:http://sourceforge.net/projects/putty.mirror/files/?source=navbar

下载源码解压缩后进入windows/MSVC目录,使用vs2005以上版本打开 PUTTY.DSW文件,根据提示转换为vs工程

根据以下方式修改putty.h, wihelp.h, settings.c, config.c, ssh.c

  1. 修改winhelp.h增加如下代码

    #define WINHELP_CTX_connection_password "connection.password:config-password"
  2. 修改读写配置文件settings.c

    在 write_setting_s(sesskey, "UserName" , cfg->username); 之后添加

    write_setting_s(sesskey, "PassWord" , cfg->password);

    在 gpps(sesskey, "UserName" , "" , cfg->username, sizeof(cfg->username)); 之后添加

    gpps(sesskey, "PassWord" , "" , cfg->password, sizeof(cfg->password));
  3. 修改config.c配置页面增加密码输入控件

    在config.c里面,在 ctrl_editbox(s, "Auto-login username" , 之后加入如下代码:

            ctrl_editbox(s, "Auto-login password", \'w\', 50,
                 HELPCTX(connection_password),
                 dlg_stdeditbox_handler, I(offsetof(Config,password)),
                 I(sizeof(((Config *)0)->password)));
  4. 修改ssh.c登录过程的入口

    找到"Plain old password authentication"下面变量定义部分 , 与 "Send the password packet." 之间的代码段(后面简称:代码段www.opensoce.com),判断一下ssh->cfg.password是否为空,为空则顺序执行代码段www.opensoce.com,否则跳过代码段www.opensoce.com,直接给s->password赋值为ssh->cfg.password的内容并执行代码段www.opensoce.com后面的内容,关键代码如下:

    /*
    * Plain old password authentication.
    */
    int ret; /* not live over crReturn 原变量定义*/
    int changereq_first_time; /* not live over crReturn 原变量定义*/
    if (strlen(ssh->cfg.password)==0){//我们增加的代码
    //代码段www.opensoce.com
    }else//我们增加的代码
       s->password = dupstr( ssh->cfg.password );//我们增加的代码
    /*原有注释部分
     * Send the password packet.
     *
     * We pad out the password packet to 256 bytes to make
     * it harder for an attacker to find the length of the
     * user\'s password.
     *
     * Anyone using a password longer than 256 bytes
     * probably doesn\'t have much to worry about from
     * people who find out how long their password is!
     */

至此,关键代码修改完成。下面进行编译,因为源码是vc6的,编译过程中可能会出现一些错误提示,我遇到的错误提示及修改方法如下:

D:\\Program Files (x86)\\Microsoft Visual Studio 8\\VC\\PlatformSDK\\include\\sspi.h(59) : 
   fatal error C1189: #error :   You must define one of SECURITY_WIN32, SECURITY_KERNEL, or...

解决方案:

在winstuff. h中加如下定义:

#define SECURITY_WIN32

OK, 打完收工!

让PUTTY保存密码

让PUTTY保存密码

给我留言

您必须 [ 登录 ] 才能发表留言!

×
#