1. 程式人生 > >修改PuTTY實現儲存密碼自動登入

修改PuTTY實現儲存密碼自動登入

一直鍾情於PuTTY的小巧精悍,是我SSH連線之必選。雖然喜歡這款軟體的小巧,但亦要承受其不方便之苦。最希望PuTTY新增的兩個功能是自動登入和Tab支援。這也是眾多使用者的wishlist,但官方已明確的斷了大家的念想。
關於自動登入(auto-login password),當然需要儲存密碼的功能,官方的迴應是記住密碼會帶來顯著的安全問題:任何能使用你的裝置的人都能輕而易舉的得到你的密碼,使用它,甚至濫用他。建議通過SSH的公鑰驗證來自動登入,它更加方便和安全。詳細迴應參看這裡
關於Tab支援,官方的迴應是需要重構windows相關的程式碼,代價比較大,再者並不是所有人都喜歡tab...,詳細迴應
參看這裡

PuTTY是開源的,我們可以很容易得到它的原始碼,這是能夠修改PuTTY功能的前提。在PuTTY的Connection->Data選項中有Auto-login username這一項,我們可以在原始碼中定位到插入點,檔案為Config.c ,Auto-login password就是要插入的密碼文字框項(Line5-9)。事實上,username是修改整個程式碼的參照系,從以下程式碼片段中也可以看出。
ctrl_editbox(s, "Auto-login username", 'u', 50,
			 HELPCTX(connection_username),
			 dlg_stdeditbox_handler, I(offsetof(Config,username)),
			 I(sizeof(((Config *)0)->username)));
c = ctrl_editbox(s, "Auto-login password", 'w', 50,
			 HELPCTX(connection_password),
			 dlg_stdeditbox_handler, I(offsetof(Config,password)),
			 I(sizeof(((Config *)0)->password)));
c->editbox.password = 1; //password type, do not display directly

定位HELPCTX函式,檔案為windows/Winhelp.cWinhelp.h,在connection_username行下插入(Line2):
#define WINHELP_CTX_connection_username "connection.username:config-username"
#define WINHELP_CTX_connection_password "connection.password:config-password"

定位Config變數,得知其為config_tag型別的結構體,定位到putty.h,在該結構體中加入password的宣告(Line2):

   char username[100];
   char password[100];

接下來就是對password的處理了,在ssh連線的auto login時,會處理username,同理在該函式中,新增對password的處理。ssh連線有兩種方式:ssh1和ssh2,所以對應的兩個函式都要修改。檔案為Ssh.c。對ssh1的修改如下(位於do_ssh1_login()中)(Line8-18):
	/*
	 * Show password prompt, having first obtained it via a TIS
	 * or CryptoCard exchange if we're doing TIS or CryptoCard
	 * authentication.
	 */
	{
	    int ret; /* need not be kept over crReturn */
	if (strlen(ssh->cfg.password) == 0) {
	    ret = get_userpass_input(s->cur_prompt, NULL, 0);
	    while (ret < 0) {
		ssh->send_ok = 1;
		crWaitUntil(!pktin);
		ret = get_userpass_input(s->cur_prompt, in, inlen);
		ssh->send_ok = 0;
	    }
	} else {
		ret = 1;
		strcpy(s->cur_prompt->prompts[0]->result, ssh->cfg.password);
	}

對ssh2的修改如下(位於do_ssh2_authconn()中)(Line17-27):
		/*
		 * Plain old password authentication.
		 */
		int ret; /* not live over crReturn */
		int changereq_first_time; /* not live over crReturn */

		ssh->pkt_actx = SSH2_PKTCTX_PASSWORD;

		s->cur_prompt = new_prompts(ssh->frontend);
		s->cur_prompt->to_server = TRUE;
		s->cur_prompt->name = dupstr("SSH password");
		add_prompt(s->cur_prompt, dupprintf("%[email protected]%.90s's password: ",
						    s->username,
						    ssh->savedhost),
			   FALSE, SSH_MAX_PASSWORD_LEN);

		if (strlen(ssh->cfg.password) == 0) {
			ret = get_userpass_input(s->cur_prompt, NULL, 0);
			while (ret < 0) {
		    		ssh->send_ok = 1;
		    		crWaitUntilV(!pktin);
		    		ret = get_userpass_input(s->cur_prompt, in, inlen);
		    		ssh->send_ok = 0;
			}
		} else {
			ret = 1;
            strcpy(s->cur_prompt->prompts[0]->result, ssh->cfg.password);
		}

至此,ssh的Auto-login password已實現。但是還需要就password的儲存繫結到load和save功能上,這兩個功能的實現位於在Settings.c檔案中。在函式save_open_settings()中新增(Line2):
    write_setting_s(sesskey, "UserName", cfg->username);
    write_setting_s(sesskey, "PassWord", cfg->password);

在函式load_open_settings()中新增(Line2):
    gpps(sesskey, "UserName", "", cfg->username, sizeof(cfg->username));
    gpps(sesskey, "PassWord", "", cfg->password, sizeof(cfg->password));

至此,所有程式碼修改完成,根據README檔案的提示,我使用MinGW編譯了一下,MinGW可以在這裡得到。編譯方法如下:
$cd putty-src/windows
$make -f makefile.cyg

在該windows目錄下生成所有的可執行檔案。如果你不想修改編譯,可以直接下載我編譯好的,下載地址在這裡

Update: 修改後的原始碼已經放在Github上:putty-improvement

相關推薦

修改PuTTY實現儲存密碼自動登入

一直鍾情於PuTTY的小巧精悍,是我SSH連線之必選。雖然喜歡這款軟體的小巧,但亦要承受其不方便之苦。最希望PuTTY新增的兩個功能是自動登入和Tab支援。這也是眾多使用者的wishlist,但官方已明確的斷了大家的念想。關於自動登入(auto-login password

第5天sp儲存案例:記住密碼+自動登入

第5天sp儲存案例:記住密碼+自動登入 記住密碼+自動登入 記住密碼+自動登入 (1)xml佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro

java實現密碼自動登入,記住密碼

<pre name="code" class="java"><span style="font-size:18px;">1.身份加密 2.存入cookie 3.下次登入先判斷c

利用expect + sftp 實現遠端主機自動登入及下載

利用expect + sftp 實現遠端主機自動登入及下載: (ssh是一樣的) #!/usr/bin/expect -f ## Create by Cyril. ## "Usage:./downFilesFromStation USER PWD RemoteIP SourcePat

JSP實現網頁的自動登入(session+cookie)實現

1、session的作用   使用者用瀏覽器訪問web伺服器時,會為每個使用者建立一個session(會話),session在使用者關閉瀏覽器之前都是有效的,所以我們可以在session中儲存使用者的一些資訊,以供使用。這裡我們用session儲存使用者的賬號名

七、記住密碼自動登入

1.activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.c

SharedPreferences實現記住密碼登入介面-Android

  最近在學習Android的資料儲存,便將自己的理解寫下來。新手淺顯望理解。 在Android中,儲存資料主要採用了3種方案,分別為檔案儲存, SharedPreferences儲存以及資料庫儲存,當然,資料也可以儲存在sd卡里,但相比上面這幾種,可能就要麻煩點了,而且安全性

linux ssh 不用密碼自動登入的幾種方法

2. 控制n個機器如上所述自動登入 那就需要n對鑰匙(金鑰和公鑰), ssh-keygen 命令可以隨意更改鑰匙對的名字, 比如: # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save

spring boot結合spring security實現註冊後自動登入

spring boot結合spring security實現使用者註冊後自動登入 在開發過程中,有些頁面只有使用者登入之後才能訪問,比如使用者的個人中心,但是按道理使用者註冊之後也應該有許可權進入了個

htmlunit模擬瀏覽器實現163郵箱自動登入

對於表單隱藏在js內,需要解析js並動態載入網頁,找了很多元件,包括httpunit,後來試驗htmlunit通過。感覺httpunit還是比htmlunit差點,所以建議用htmlunit來解析js動態載入的網頁並自動提交表單。對於模擬瀏覽器的htmlunit元件還是有很

C#實現遠端桌面自動登入

問題:A電腦登入B電腦 1,設定B電腦允許遠端登入 2,用A手動通過“遠端登入軟體”登入B,生成Default.rdp檔案 3.C#程式設計實現自動登入。 具體操作 1.設定B電腦允許遠端登入 http://jingyan.baidu.com/article/49711c

實現linux的自動登入--命令列模式啟動 .

linux的登入主要是由兩個檔案在控制,/usr/sbin/getty來獲得使用者名稱,並進行檢查使用者名稱是否存在,然後將使用者名稱傳遞給/usr/bin/login來獲取使用者輸入密碼和檢查密碼是否正確. 所以要實現linux的自動登入,就要改動這兩個檔案. 1.getty實現的主要功能是:   1)開

Ubuntu/fedora 設定禁止自動鎖屏、設定免密碼自動登入、免密碼執行sudo操作

虛擬機器使用 Ubuntu的時候 過段時間 就會自動鎖屏有點不方便,特總結一下解決方法禁止自動鎖屏 首先宣告:該文雖以Ubuntu 13.04為例,同樣適用於Fedora 17(已測試),但在較低版本的Ubuntu下可能有所差異,具體看後面的注意事項。技巧目錄:解決Ubunt

Linux系列:Ubuntu/fedora實用小技巧—禁止自動鎖屏、設定免密碼自動登入、免密碼執行sudo操作

首先宣告:該文雖以Ubuntu 13.04為例,同樣適用於Fedora 17(已測試),但在較低版本的Ubuntu下可能有所差異,具體看後面的注意事項。 技巧目錄:解決Ubuntu下每隔幾分鐘自動鎖屏,需要重新輸入密碼的問題無須輸入使用者名稱密碼讓Ubuntu自動登入到桌面

OkHttp3.0(結合Retrofit2/Rxjava)利用攔截器實現全域性超時自動登入、新增統一引數

應用場景:1.服務端為了統計各個平臺、版本的使用情況,有時在介面中要求傳遞統一的諸如version(客戶端版本)、os(客戶端平臺android/iOS)、userId等引數,這時如果在介面中一一新增就比較繁瑣了,考慮做全域性處理;另外,一次登入成功後,

【Android】【功能設計】儲存帳號密碼自動登入,離線登入實現方案

勾選【記住密碼】【自動登入】複選框時: 什麼也不做,所有操作放在點選【登入】按鈕時執行 點選【登入】按鈕時: 為了簡化程式碼和實現邏輯,不管密碼對錯,登入資訊統一儲存到【上次登入帳號】【上次登入密碼】【是否儲存密碼】【是否自動登入】配置 登入成功

mstsc儲存使用者名稱和密碼實現自動登入遠端桌面

MSTSC引數說明 首先可以使用mstsc /?來檢視關於mstsc的引數說明 根據上述的命令說明,我這裡實現的bat檔案為 mstsc C:/a.rdp /console /v: xxx.xxx.xxx.xxx:3389   rdp檔案生成方法 最近由

Android 記住密碼自動登入介面的實現(SharedPreferences 的用法)

SharedPreferences介紹: SharedPreferences是Android平臺上一個輕量級的儲存類,主要是儲存一些常用的配置引數,它是採用xml檔案存放資料的,檔案存放在"/data/data<package name>/shared_pref

XAMPP 修改MySQL資料庫密碼+取消自動登入phpMyAdmin

點選Admin 進入phpMyAdmin 點選賬戶後選擇root localhost,點選修改許可權 選擇修改密碼,輸入新密碼,點選執行即可。這裡有一個生成密碼的功能,是將你的密碼生成為一串字串,以後密碼就是該字串,可自行選擇 密碼到這裡就修改完畢了,但還要修改配置檔案才能在

登入介面如何實現記住使用者名稱和密碼實現自動登入

最近在一次練習中遇到了一個問題,如何在登入介面實現記住使用者名稱和密碼,並且可以進行勾選是否自動登入。 首先,給大家看下我的登陸介面。 很顯然,我佈置了checkbox,一個用於記住密碼,一個用於自動登入。 <label> <input type