第一步:生成密匙
運行puttygen.exe,選擇需要的密匙類型(parameters)和長度(bits)。putty默認使用SSH1協議,長度默認值為1024,

我們暫且選用SSH1協議,後面討論使用SSH2協議與使用SSH1協議設置上的不同。

點擊Generate生成密匙,生成後 的Key passphrase 和 Confirm passphrase 兩項可以保持為空 ,passphrase是用來保護私匙的密碼,如果沒什麼特別高的安全要求就不用了,免得登錄時還要輸入一次密碼。後面討論如果輸入passphrase,也可以自動登錄系統。點擊 Save public key 按鈕和 Save private key 按鈕分別保存公匙和私匙例如 id_rsa1.pub 和 id_rsa1.prv。

第二步:上傳密匙
用自己的帳號登錄遠程系統,然後執行下面的命令:
cd ~
mkdir .ssh

chmod 700 .ssh
cat id_rsa1.pub > .ssh/authorized_keys

chmod 600 .ssh/authorized_keys

第三步:設置Putty
啟動Putty,設置好session的各項參數(如IP address,protocol選擇SSH),然後從左邊選擇SSH,”Preferred SSH protocol version:”,

這時我們用的是SSH1協議,那麼我們就選擇協議版本1,再“SSH->Auth”,”Private key file for authentication:” 點擊 Browse 按鈕,選擇 id_rsa1.prv 文件。
再從左邊選擇 Session,然後點擊 Save 按鈕把修改保存下來。然後點擊Open 按鈕就可以登錄了。
如果上面的操作都沒有問題,那這時應該就自動登錄了,無需輸入密碼。 正常情況下會顯示如下:

login as: root

Authenticating with public key "rsa-key-20050328"

Last login: Mon Mar 28 14:39:13 2005 from 192.168.0.2

有了上面第二行的信息,表明你已經正常啟用SSH通訊了。

======================================================================
其它問題:

一,使用SSH2協議

如果要用SSH2協議,需要修改一下 /etc/ssh/ssh_config 文件,把#Protocol 2,1 這一行前面的#字符去掉,默認也是先是ssh2,

再是ssh1,實際上不除去#注釋也是可以的。

用puttygen.exe生成SSH2協議格式的密匙(操作方法同上),上傳到.ssh/authorized_keys文件時,需作如下修改,

因為puttygen.exe和bsd/Linux生成的SSH2密匙格式不一樣。

例如puttygen.exe生成的公匙是id_rsa2.pub

[root@mail .ssh]# cat id_rsa2.pub

---- BEGIN SSH2 PUBLIC KEY ----

Comment: "rsa-key-20050328"

AAAAB3NzaC1yc2EAAAABJQAAAIEAtZgDykOOegKu6sCGzxpzA2CwB5o2X37FM4lg

41LXw3DR2/7+aBQNYDez3BWkGIluyfuyWYlw21bEzUiJhJ9/8tX5FUJLBYr/ELtq

jI08dfhHaRjVM8cRQX7fv6jCNIuyEKlml9QuFdIOIX3bS5dkAHkk9GKMgaMISK44

zB4qUfM=

---- END SSH2 PUBLIC KEY ----

而BSD/Linux生成的ssh2格式是
[root@linuxwht .ssh]# cat id_rsa.pub

ssh-rsa AAAB3NzaC1yc2EAAAABIwAAAIEAsD4qEibcK1e9ZgFX6bahxnU/It5MjC/7U56n

OOZ0MDf+LHU7bWo3M6XH/mp1KeTRrHIPtmEl2PTkf9/3NffNtBdAkSJ/sWoPoaeJlShcvK2

wzOsrre4FyJRRUtl2jdCDJxRX0Cu2GV/aNphVQoAuU0lj7/55eladpO8/jr14adE=

所以照著Linux默認的格式改一下就可以了。

如果沒有 puttygen.exe,那麼可以用 bsd/linux 自帶的 ssh-keygen 生成密匙,命令格式如下:
ssh-keygen -b 密匙長度 -t 密匙類型
密匙類型可以是:rsa1 (對應SSH1 RSA)、rsa 和 dsa (對應SSH2)

如:ssh-keygen –b 1024 –t rsa

默認是生成的~/.ssh/id_rsa文件。

不過 ssh-keygen 生成的SSH2密匙和putty的密匙格式不同,無法直接使用,必須用 puttygen.exe 轉換一下。

所以大家還是用 rsa1 好了,反正一般用途也沒什麼區別。

二,讓Putty顯示中文

啟動putty

windows -> appearance -> font setting -> change...

將putty的默認字體設置為"新宋體" 小四

連接到服務器以後輸入:

export LANG=zh_CN.GB2312

更改環境變量。
三,設置passphrase後,讓系統自動登錄

打開pageant.exe,右擊右下角的pageant.exe的圖標,"add key",選擇剛剛生成的私匙如id_rsa2.ppk,OK,

只要打開pageant.exe,以後就不用輸入passphrase,系統就可以自動登錄了。

pageant 的作用是將解加密的 private key 放在內存裡,需要的時候調用。

 

======================================================================

可能出現的幾種問題:

1、Server refused our key
公匙和私匙不匹配,或者沒有 authorized_keys 文件

解決方法:這個問題大多是使用puttygen.exe生成ssh2格式的密匙和Linux上面的不一樣,

照著上面的改(只是增加ssh-rsa)就可以了。

2、Unable to use key file "id_rsa1.prv" (SSH1 private key)
私匙文件的格式不正確或登錄類型沒有設置正確
解決方法:打開puttyàSSH選項時,“Preferred SSH protocol version:”,這時如果你用SSH1協議,

就選擇“1”,如果你使用SSH2協議就選擇“2”,這個大多是你生成的是SSH1協議的密匙,

而putty登錄類型選擇為protocol 2。
------------------------------------------------
SSH:安全外殼協議
一、SSH介紹

什麼是SSH?

傳統的網絡服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網絡上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的, 就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。所謂“中間人”的攻擊方式, 就是“中間人”冒充真正的服務器接收你的傳給服務器的數據,然後再冒充你把數據傳給真正的服務器。 服務器和你之間的數據傳送被“中間人”一轉手做了手腳之後,就會出現很嚴重的問題。

SSH的英文全稱是Secure Shell。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣“中間人”這種攻擊方式就不可能實現了, 而且也能夠防止DNS和IP欺騙。還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。 SSH有很多功能,它既可以代替telnet,又可以為ftp、pop、甚至ppp提供一個安全的“通道”。

最初SSH是由芬蘭的一家公司開發的。但是因為受版權和加密算法的限制,現在很多人都轉而使用OpenSSH。 OpenSSH是SSH的替代軟件,而且是免費的,可以預計將來會有越來越多的人使用它而不是SSH。

SSH是由客戶端和服務端的軟件組成的,有兩個不兼容的版本分別是:1.x和2.x。 用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。

SSH的安全驗證是如何工作的

從客戶端來看,SSH提供兩種級別的安全驗證。

第一種級別(基於口令的安全驗證)只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密, 但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器, 也就是受到“中間人”這種方式的攻擊。

第二種級別(基於密匙的安全驗證)需要依靠密匙,也就是你必須為自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。 如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之後, 先在你在該服務器的家目錄下尋找你的公用密匙,然後把它和你發送過來的公用密匙進行比較。如果兩個密匙一致, 服務器就用公用密匙加密“質詢”(challenge)並把它發送給客戶端軟件。 客戶端軟件收到“質詢”之後就可以用你的私人密匙解密再把它發送給服務器。

用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網絡上傳送口令。

第二種級別不僅加密所有傳送的數據,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。 但是整個登錄的過程可能需要10秒。

 

SSH 主要有三部分組成:
傳輸層協議 [SSH-TRANS] 提供了服務器認證,保密性及完整性。此外它有時還提供壓縮功能。 SSH-TRANS 通常運行在 TCP/IP連接上,也可能用於其它可靠數據流上。 SSH-TRANS 提供了強力的加密技術、密碼主機認證及完整性保護。該協議中的認證基於主機,並且該協議不執行用戶認證。更高層的用戶認證協議可以設計為在此協議之上。

用戶認證協議 [SSH-USERAUTH] 用於向服務器提供客戶端用戶鑒別功能。它運行在傳輸層協議 SSH-TRANS 上面。當

SSH-USERAUTH 開始後,它從低層協議那裡接收會話標識符(從第一次密鑰交換中的交換哈希 H )。會話標識符唯一標識此會話並且適用於標記以證明私鑰的所有權。 SSH-USERAUTH 也需要知道低層協議是否提供保密性保護。

連接協議 [SSH-CONNECT] 將多個加密隧道分成邏輯通道。它運行在用戶認證協議上。它提供了交互式登錄話路、遠程命令執行、轉發 TCP/IP 連接和轉發 X11 連接。

一旦建立一個安全傳輸層連接,客戶機就發送一個服務請求。當用戶認證完成之後,會發送第二個服務請求。這樣就允許新定義的協議可以與上述協議共存。連接協議提供了用途廣泛的各種通道,有標準的方法用於建立安全交互式會話外殼和轉發(“隧道技術”)專有 TCP/IP 端口和 X11 連接。

通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。

SSH分為兩部分:客戶端部分和服務端部分。

服務端是一個守護進程(demon),他在後台運行並響應來自客戶端的連接請求。服務端一般是sshd進程,提供了對遠程連接的處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接。

客戶端包含ssh程序以及像scp(遠程拷貝)、slogin(遠程登陸)、sftp(安全文件傳輸)等其他的應用程序。

他們的工作機制大致是本地的客戶端發送一個連接請求到遠程的服務端,服務端檢查申請的包和IP地址再發送密鑰給SSH的客戶端,本地再將密鑰發回給服務端,自此連接建立。剛才所講的只是SSH連接的大致過程,SSH 1.x和SSH 2.x在連接協議上還有著一些差異。

SSH被設計成為工作於自己的基礎之上而不利用超級服務器(inetd),雖然可以通過inetd上的tcpd來運行SSH進程,但是這完全沒有必要。啟動SSH服務器後,sshd運行起來並在默認的22端口進行監聽(你可以用 # ps -waux | grep sshd 來查看sshd是否已經被正確的運行了)如果不是通過inetd啟動的SSH,那麼SSH就將一直等待連接請求。當請求到來的時候SSH守護進程會產生一個子進程,該子進程進行這次的連接處理。

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料