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

让PUTTY保存密码

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

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增加如下代码

    [php]#define WINHELP_CTX_connection_password "connection.password:config-password"[/php]

  2. 修改读写配置文件settings.c

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

    [php]write_setting_s(sesskey, "PassWord" , cfg->password);[/php]

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

    [php]gpps(sesskey, "PassWord" , "" , cfg->password, sizeof(cfg->password));[/php]

  3. 修改config.c配置页面增加密码输入控件

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

    [php] ctrl_editbox(s, "Auto-login password", 'w', 50,
    HELPCTX(connection_password),
    dlg_stdeditbox_handler, I(offsetof(Config,password)),
    I(sizeof(((Config *)0)->password)));[/php]

  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后面的内容,关键代码如下:

    [php]
    /*
    * 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!
    */[/php]

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

[php]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...[/php]

解决方案:

在winstuff. h中加如下定义:

[php]#define SECURITY_WIN32[/php]

OK, 打完收工!

让PUTTY保存密码

让PUTTY保存密码

给我留言

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

×
#