Archive for the '玩物誌' Category

SSH Agent Forwarding on Putty & Screen

大家在登入工作站或是伺服器的時候,最常使用到的應該是 Putty (Pietty, PuttyTray, …etc) 這類提供 SSH 協定的終端機,最傳統也最麻煩的方式就是每次登入的時候都輸入密碼,比較好的方式就是使用 Key Authentication,創造一組 Public Key 和 Private Key,當登入的時候比對,如果 Match 便直接允許登入,不再需要輸入密碼。

但是,在其他的狀況下,這樣的方式也許不是相當適合。以我來說,我常常登入到一台主要的機器,然後再透過這台機器連到其他機器,而在工作當中,也可能在這些機器之間互連,這代表我必須將同一組 Public/Private Key 都放一份到這些機器中,或是建很多組 Public/Private Key 來做這件事,但對於安全性而言,這已經等同於把 Private Key 放到上面給人用了。幸好,SSH 提供了 Agent Forwarding 的功能,能夠讓我只需將 Private Key 放在自己的 Notebook 上,然後便可在這些機器之間暢行無阻了。有關 SSH Key Authentication 及 Agent Forwarding 相關的運作流程及知識,可以參考這裡,這篇只是教大家如何設定。

1. Basic SSH Key Authentication

要做到基本的 SSH Key Authentication,首先便是要產生一組獨一無二的 Key Pair (Public/Private Key),在 Windows 上我使用 puttygen。執行 puttygen 可以看到下面的畫面:
puttygen 1

按下 “Generate” 產生一組 Key Pair,在產生的過程當中,它會要求你隨意移動滑鼠遊標,然後透過移動來亂數產生這組 Key Pair:
puttygen 2

結束後便會有一組獨一無二的 Key Pair 了:
puttygen 3

我們將產生的 Public Key 複製貼到:

$HOME/.ssh/authorized_keys

然後,再按下 “Save private key” 將其對應的 Private Key 存起來供 SSH Agent 使用。在中間可以看到 “Key passphrase”,它可以用來保護你的 Private Key,在進行 Key Authentication 的時候,會要求你輸入設定的 Key Passphrase,如果不符合,即使拿到了 Private Key 也是無法成功通過認證。

接著我們要利用 SSH Agent 來幫我們管理這些 Key Pair,在 Windows 中,我使用 pageant;執行 pageant,會在右下角看到它的 icon 出現,點選右鍵可以看到它的功能:
pageant 1

“View Keys” 可以檢視現在加入的 Private Key 有哪些,”Add Key” 顧名思義就是加入一個 Private Key,我們現在就是要將剛剛產生的 Private Key 加入到 pageant,在加入的時候,如果你剛剛有設定 Key passphrase,便要要求你輸入,這樣 pageant 在幫你進行認證的時候便不需要再手動輸入 Key passphrase 了:
pageant 2

加入 Private Key 後,便可以看到我們加入的 Key 已經記錄下來了:
pageant 3

然後透過 pageant 來執行我們在 Putty 當中設定的 Session,便會自動幫你進行認證,認證成功便會看到這樣的訊息:
putty 2

要特別注意的是,很多人常常會問,雖然不必再輸入密碼了,但是為什麼還是要輸入帳號,其實只需要在 Putty 當中設定好預設登入的帳號名稱即可:
putty 1

2. SSH Agent Forwarding

要達到 SSH Agent Forwarding,我們必須在 Putty 的設定中動點手腳:
putty 3

將 “Allow agent forwarding” 選取就可以了。然後只需要將同一份 Public Key 放到其他會透過第一部機器連出的機器上,在第一部機器使用 SSH 的時候下:

ssh -A <SERVER_HOST>

便可以將第一台機器的 agent forward 出去。如此一來,只需要同一份 Public/Private Key 便可以在各台機器中暢行無阻,而且不用擔心 Private Key 需要放出去的風險了。

3. SSH Agent Forwarding on Screen

在試的過程中,如果有使用 Screen 這個好用工具的人,一定會發現,一旦進入到 Screen 當中,SSH Agent Forwading 似手就失效了,但是離開 Screen 一切又正常,為何會這樣?

主要是因為使用 SSH Agent Forwarding 會參考一個環境變數 “SSH_AUTH_SOCK”,這個在 Screen 當中並不會被帶入,因此會失效。所以如果要讓 SSH Agent Forwarding 能夠在 Screen 下正常運作,便必須要做一些手腳,在網路上其實有蠻多方法可以用,大部份是將 ssh 和 screen 都做一個 wrapper,主要的想法都是在進入 screen 後自動建立環境變數 (對 .screenrc 下手),但這樣的想法只能確保 screen 自動建立以及已存在的視窗,對於新建立的視窗可能就沒辦法做到,所以我自己寫了個 shell script “setScreenSshAgent”:

#! /bin/sh
MKDIR=`which mkdir`
LN=`which ln`
if [ -n "$SSH_AUTH_SOCK" ]; then
    if [ ! -d "$HOME/.screen" ]; then
        ${MKDIR} -p "$HOME/.screen"
    fi

    if [ -z "$WINDOW" ]; then
        ${LN} -fs "$SSH_AUTH_SOCK" "$HOME/.screen/ssh-agent-screen-$HOST"
    fi
fi

這支程式主要是將當時的 SSH_AUTH_SOCK link 到 “$HOME/.screen/ssh-agent-screen-$HOST” 下,然後在 .cshrc 下加入:

$HOME/bin/setScreenSshAgent
if ($?WINDOW) then
    setenv SSH_AUTH_SOCK "$HOME/.screen/ssh-agent-screen-$HOST"
endif

這樣子就能在登入時更新最新的 SSH_AUTH_SOCK 到 “$HOME/.screen/ssh-agent-screen-$HOST” 中,然後在 Screen 建立新的視窗也會自動將 SSH_AUTH_SOCK 設定到此 link,如此一來,SSH Agent Forwarding 便能正常運作。

Update: 把一些設定改一下,原本的 .cshrc 裡的設定會讓在非家目錄下執行 Shell 出現找不到的問題,所以改成絕對路徑。

Why?! Leopard 這麼會當?!

之前有提到我的 MacBook 自從換了 leopard 之後就當機連連,讓我一度對 Apple 失去信心!= =

不過上次到台北參加某 Y 社的活動時,閒著沒事就抓了套 memory testing 的軟體下來測,不測還好,一測就看到螢幕上滿滿的 “Failure…!@#$@^&”,不會真的是記憶體的問題吧!

活動結束就馬上跟麻大帥衝去光華優仕換記憶體,新的記憶體一裝上,開機之後一直到現在沒有再當過,連程式執行的速度也飛快,我真佩服自己能夠忍受之前的那種工作機環境。

所以,鄉親啊!下次換記憶體的時候記得先測測啊!

GMail 新版上線

整體速度變快很多,而且整理通訊錄的工具變得很好用了,舊版的真的不怎麼好用…不過我發現 Firefox 上,建立 Filter 的功能最後一個 Step,選取 Tag 的下拉式選單不能用,只好轉用 Safari 去設,希望 google 可以把這個 bug 早點修好!

整體而言,這次的改版不錯 – 速度的提升和好用的通訊錄工具。

FilesTube – 好用的檔案搜尋

FilesTube,乍看之下會覺得跟 YouTube 很像,不過它的功能可不是用來分享影片,而是專門搜尋各大網路檔案空間的檔案 (RS, MegaUpload, …),這些網路檔案空間多半沒有提供搜尋的功能,不然就是得付費才能擁有,現在有了這項服務,便可以很快地搜尋到你想要的檔案了。

隨便打了一個 naruto 便跑出一大堆檔案出來。