1 頁 (共 1 頁)

ssh putty 免密碼登入

發表於 : 2010-08-10 11:47:53
yehlu
http://www.josephj.com/article/putty-key/



你在使用 PuTTY 嗎? 如果你還在每天打密碼做登入,那實在是遜掉了。這篇文章就是要教你怎麼設定 PuTTY 免登入!
一步一步教到會

如果你想要瞭解密碼免登入的原理的話,請參考徹底瞭解 SSH 的免密碼登入。
步驟 1. 產生金鑰

你可以從 PuTTY 的下載頁找到 PuTTYgen 這個金鑰產生器、然後產生所需的公私鑰。
但我個人建議比較好的做法還是找一台 *nix 的主機,因為這樣的方式才可以做一次、用在所有的地方。
如何做請參考SSH 免密碼登入的步驟 1。
步驟 2. 從主機上取得私鑰

如上所述,我們已經在主機上製作完畢公私鑰、且將公鑰全部放進 authorized_keys,
接著就可以利用 WinSCP 等軟體把檔案從主機上抓回來(identity, id_rsa 與 id_dsa)。
建議在桌面上建立一個叫 unix-keys 的目錄。
步驟 3. 更改私鑰名稱

接著我們必需將所有私密金鑰的副檔名改為 ppk。
步驟 4. 產生 PuTTY 專用的私密金鑰

請到 PuTTY 下載頁把 PuTTYgen.exe 抓回來,執行後你會看到這樣的程式畫面:

a. 首先我們先按下 Load 的按鈕,把一個剛改副檔名的 ppk 私密金鑰讀取進來,如下圖,他會要求你輸入 Passphrase。

b. 接著請選擇金鑰的類型,依照你選擇檔案的不同,如果是 identity.ppk,請選 SSH-1 (RSA)、
id_rsa.ppk 請選 SSH-2 RSA、id_dsa.ppk 選 SSH-2 DSA。

c. 再來就是將處理好的私鑰做存檔,我會在 C:\> 底下開一個叫 ssh-keys 的目錄存放這些私鑰。

三隻 .ppk 的金鑰都需要照上面的順序產出才行喔!
步驟 5. 設定 PuTTY 的自動對應

自動對應有兩種方法可用,第一種是透過 PuTTY Configuration、第二種是透過 Pageant.ext。
a. 方法一:透過 PuTTY Configuration

在第一個畫面 (Session),請點選你要設定的連線,再按一下旁邊的 Load,就可以把相關組態檔讀取進來。

點選 Connection > Data,在 Auto-login username 填寫你的使用者名稱。

在 Connection > SSH > Auth 中的 Private key file for authentication,選擇適合此主機的金鑰(請參考徹底瞭解 SSH 的免密碼登入)

我們可以發現,這樣的設定有點麻煩,一個主機得設定一遍、而且還得自行判斷適合的金鑰類型。而最重要的一點:免密碼登入,這樣設定並沒有辦法幫我們解決,因你每次還是得自己打 Passphrase。
b. 方法二:利用 Pageant

上面講的麻煩,用 Pageant.exe( 請到 PuTTY 下載頁把 Pageant.exe 抓回來)可以避免掉大半。你只需一次把三個私鑰匯入即可:

再加入的過程中,它會詢問你 Passphrase,如果三個都相同的話,你只要輸入一次即可。
發現問題

看起來 Pageant 是一個不錯的解決方案,但當筆者關機後再開,發現 Pageant.exe 即使有設定為自動啟動,剛剛加的私鑰就全都不見了、且 Passpharse 也得再輸入一次,實在不是很貼心,所以我就啟動時自動執行了下面的 Script:
"C:\Program Files\PuTTY\pageant.exe" c:\ssh-keys\identity.ppk c:\ssh-keys\id_rsa.ppk c:\ssh-keys\id_dsa.ppk

只要開一個新的文字檔、並存成副檔名為 .bat 的即可執行。我會複製一個捷徑放入開始 > 程式集 > 啟動,讓此 Script 一登入就執行。

以後你每次登入,都會自動跳出要求你輸入 Passphrase 的視窗,以後便暢行無阻了 :)

SSH 免密碼登入

發表於 : 2010-08-10 11:48:35
yehlu
http://www.josephj.com/article/understand-ssh-key/



關於 SSH 免密碼登入,我的第一篇學習文章是參考 Tsung 的 ssh keygen 免輸入密碼。
他的文章很淺顯易懂,我依樣畫葫蘆就成功了。
但問題是公司的限制是必需要有 passphrase、Tsung 的文章並沒有解釋此部份、造成我不打密碼但還是得打 passphrase。
我決定花一些時間把這個原理徹底弄懂,並寫成一篇文章跟大家分享。
一、基本流程說明
1. 私密與公開金鑰

以 SSH 登入任何主機都必需要打帳號、密碼,除了不方便、另外還增加了被竊取的風險(有些軟體如 winscp 是可儲存的)。
解決的方式就是使用金鑰產生器來產生一筆公開金鑰(Public Key)與私密金鑰(Private Key)對應做免密碼的登入。
使用者只需將公開金鑰的內容附加系統上特定的檔案中,以及在自己的環境指定好私密金鑰,系統在登入流程中即會自動對應,正確無誤即可登入。
讓整個登入流程快速且安全。
2. 金鑰種類

但是對應並沒有想像中這麼簡單,就像是木門上只能裝喇吧鎖而無法裝大鎖,不同的主機所能使用的金鑰機制也有所不同:
SSH 有 Protocol 1 及 Protocol 2 兩種,常見金鑰編碼機制則有 RSA1、RSA2、以及 DSA 等三種。
3. 保護金鑰的措施

而另外一個問題,如果有人拿到了你的私密金鑰,就相當於他可以在你的主機為所欲為。
保護的措施就是使用 Passphrase(也可以不設)、私密金鑰的密碼,每次要用時就得輸入。
4. Agent 機制

有 Passphrase 保護當然是安全多了,但原本想用金鑰的好處就是可以省去每次打密碼的步驟,
現在若每次又得打 Passphrase,這樣的好處就沒有了,可能還得多記一套密碼、增加打錯的可能性。
還好有 Agent 機制,他相當是你的管家、我們只要把鑰匙及 Passphrase 請他保管,在登入主機時他就會幫你解決輸入 Passphrase 的問題。
二、一步一步教到會

以下就只針對 Mac OSX 及 *nix 系統做介紹(若你是使用 Windows 中的 PuTTY,請先做完步驟一與二,再看這裡):
步驟 1. 產生金鑰

在 Command Line 中你可以使用 ssh-keygen 來產生各種類的金鑰,而我也會鼓勵大家一次把三種金鑰產生好,省得碰到不同系統麻煩。
a. 產生 RSA 1 金鑰

這種金鑰是給比較舊的系統,例如 FreeBSD 4 及以前的版本、是走 SSH Protocol 1 的,最好就使用 RSA 1 這種金鑰
$ ssh-keygen -t rsa1
Generating RSA keys: Key generation complete.
Enter file in which to save the key ($HOME/.ssh/identity): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase [建議要使用 passphrase,最少 9 碼]
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/identity.
Your public key has been saved in /home/username/.ssh/identity.pub.
The key fingerprint is: 6c:96:8c:a8:86:1b:3b:eb:1b:48:8d:3d:8d:c1:4f:dc username@abc.com
b. 產生 RSA 2 金鑰

比較新的系統,如 FreeBSD 5 及之後版本或 Linux,用 RSA 2 或 DSA 這兩種金鑰
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is: cc:e8:a9:da:a3:41:c6:a9:97:52:59:ef:0c:cf:45:b6 username@abc.com
c. 產生 DSA 金鑰
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_dsa): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/id_dsa.
Your public key has been saved in /home/username/.ssh/id_dsa.pub.
The key fingerprint is: cc:e8:a9:da:a3:41:c6:a9:97:52:59:ef:0c:cf:45:b6 username@abc.com

經過這樣的程序,我們總共會有公私鑰共三對:RSA1 ( identity.pub / identity )、RSA2 ( id_rsa.pub / id_rsa )、及 ( id_dsa.pub / id_rsa )。

我過去有一個錯誤的觀念,以為金鑰是對應系統的,所以在對每一台主機得另外產生一次。
事實上如果沒有特殊需求,你可以只用一份、用任一系統產生、並把這一份給保存好即可。希望大家不要跟我有一樣的錯誤囉!
步驟 2. 將公開金鑰放到主機

你現在在自己的機器上已經有了三對金鑰,接下來我們要把公開的三隻 (*.pub) 放到我們要登入的主機上。
$ scp ~/.ssh/*.pub 你欲登入的主機:~/.ssh/.

接著登入該系統,在沒設定好之前當然還是得乖乖打密碼
$ ssh 你欲登入的主機

系統預設處理放置公鑰的檔案叫做 authorized_keys,所以我們要把剛剛所傳的公鑰附加到這個檔案中:
$ cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 711 ~/.ssh
$ chmod 644 ~/.ssh/authorized_keys

如果沒有意外,你登出再登入主機,就會看到它請你輸入 Passphrase 的訊息。
步驟 3. 設定 ssh-agent

前面所提到,每次都要打 Passphrase 就太麻煩了,所以這裡要設定管家 ssh-agent、以保管私鑰及 Passphrase。
在你每次啟動 shell 後,請照這樣的方式來做:
a. 啟動 ssh-agent
$ eval `ssh-agent -s`
b. 將私密金鑰交給 ssh-agent 保管:ssh-add

我們將要用 ssh-add 來指定金鑰,如果你都照上面放預設的位置及相同的檔名,那就不用有任何的參數。
$ ssh-add

接著會要求你設定輸入 passphrase,如果三個都一樣,就只要打一次。
Enter passphrase for /home/username/.ssh/id_rsa:你的 Passphrase
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
Identity added: /home/username/.ssh/id_dsa (/home/username/.ssh/id_dsa)
Identity added: /home/username/.ssh/identity (username@username.com)

接著再試看看登入已經放好公鑰的主機,應該就可以不用密碼登入了!
c. 自動化流程

如果每次進 Shell 都要做 a、b 動作,可能還是太麻煩且忘記,也因此我去找了可以放在 .bash_profile 的 script ( Joseph M. Reagle Jr ),
一進入 Shell 就會把該做的動作做好,且詢問你 Passphrase: SH_ENV="$HOME/.ssh/environment"

function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/lull
/usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn’t work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
三、公私鑰所需放的機器

我的歸納是,在本機上你必需一直保有這兩份以便後續的再製。而公鑰整理成 authorized_keys,以後有新機器需要登入時一律傳此檔案上去做附加。

而除了本機外,那些機器需要放私鑰呢?我的情況是最常用的那台開發機,因為你可能會利用他去 SSH 其它台機器。不然的話,應該減少私鑰的存放地點,以求安全。

Re: ssh putty 免密碼登入

發表於 : 2010-08-10 11:49:06
yehlu
http://plog.longwin.com.tw/post/1/293

懶得打密碼, 以 key 做認證登錄.

步驟如下:

* ssh-keygen -t rsa 或 ssh-keygen -d (dsa) => 產生出 id_rsa, id_rsa.pub
* scp id_rsa.pub server_hostname:~/.ssh/
* ssh server_hostname
* cat .ssh/id_rsa.pub >> .ssh/authorized_keys 即可
* 這樣子就可以 key 認證登入, 不需輸入密碼.

注意: gen 時會問 Enter passphrase (empty for no passphrase): # 此處直接 enter 跳過,下次才不會詢問password

簡單解說一下:

* id_rsa: private key
* id_rsa.pub: public key

將 public key(id_rsa.pub) 拷貝到遠端的電腦後, 加到那 user 的 .ssh/authorized_keys 中.

之後連線時, 就會用本機的 private key(id_rsa) 與遠端電腦的 public key(authorized_keys) 做認證, 確認完成就可以直接登入, 不需輸入帳號密碼, 而且也比較安全.
相關網頁

* 使用 keychain 管理 ssh 金鑰

作者 jon ( My_Note ) :: 迴響 (12) :: 靜態連結網址
延伸閱讀

* Debian Linux 架設使用 SSH 存取 的 Git Server
* rsync 備份
* Debian Linux 架設 Subversion(SVN)
* SVN 基本指令教學
* Unix 基本指令: script 抓取 Terminal 顯示畫面, 存成檔案

相關標籤

* ssh-keygen
* keygen
* ssh keygen
* sshkeygen
* ssh-keygen ssh
* ssh-keygen rsa
* ssh-keygen passphrase
* ssh-keygen dsa
* ssh-keygen -f rsa
* ssh-keygen -f
* ssh-keygen -e
* ssh-keygen -
* ssh-keygen 认证
* ssh-keygen "public key"
* ssh-keygen t
* ssh-keygen t rsa
* ssh-keygen –t rsa
* sshkey
* sshd rsa key
* sshd keygen
* sshd key
* sshd
* ssh2 keygen
* ssh-rsa
* ssh-keygne
* ssh-keygen 免密码
* ssh-keygen 不需輸入
* ssh-keygen –t rsa 免驗證
* ssh-keyg
* ssh-key

| Powered By SiteTag

this is comment icon 建??是要passphrase的好 [回覆]

不然id_rsa不小心被人偷了,可就欲哭??了。要想不?ssh反复?passphrase,可以用ssh-add,或者更方便的工具:Keychain。??的?明,我前一?子?好??一?,供?考:
http://xyb.8800.org/2005/12/ssh.html