文章目錄
- 4.2.1. 原理
- 4.2.2. 通訊過程
- 4.2.3. 配置方法
- 4.2.4. 公開金鑰認證無需輸入口令
1. 背景:
安全殼層協議(Secure Shell,SSH)是目前應用較多的一個網路安全性通訊協定。它為網路上傳輸的資料提供機密性、完整性、認證性等安全服務。
最近在研究git伺服器,要使用ssh協議,需要搭架ssh伺服器,這是第一次搭架,做下筆記,以供參考,以下是我的應用程式環境:
C/S |
作業系統 |
軟體 |
IP地址 |
SSH服務端 |
Linux(debian) |
OpenSSH |
192.168.1.101 |
SSH用戶端 |
Windows XP |
Copssh |
192.168.1.100 |
ssh用戶端有很多選擇,可以到這裡看看:
http://en.wikipedia.org/wiki/Comparison_of_SSH_clients
2. linux上安裝OpenSSH
◆如果要下載源碼安裝,可以到以下幾個連結下載:
官網:http://www.openssh.com/
下載:http://www.openssh.com/openbsd.html
◆我選擇直接從軟體包安裝:
#apt-get install ssh
以上命令安裝同時安裝了openssh-server和openssh-client,你也可以有選擇性的安裝:
#apt-get install openssh-server
#apt-get install openssh-client
安裝完後應該會自動運行ssh服務,可以通過以下指令確認:
#ps aux|grep ssh
3. Windows XP上安裝CopSSH
官網:https://www.itefix.no/i2/copssh
安裝過程很簡單,一直“下一步”即可。
4. SSH登陸
SSH提供了兩種認證方式:口令認證和密鑰認證。在Windows XP安裝完CopSSH後,在開始菜單 > CopSSH > 03. Start a Unix BASH Shell啟動Shell視窗,在這裡就可以使用ssh命令。
4.1. 口令認證
用伺服器上的root身份登陸:
第一次登陸時,會提示無法建立/home/Administrator/.ssh目錄,你可以用以下命令建立該目錄:
$ mkdir –p /home/Administrator/.ssh |
同時,你第一次登入某一個遠程主機時,會出現沒有找到遠程主機密鑰的提示資訊。輸入"yes"後,系統會將遠程主機的密鑰加入到你的主目錄下的/home/Administrator/.ssh/known_hosts檔案中。以後登入就不會再提示了,直接輸入伺服器帳號root的密碼即可登入。
登陸後,你就可以遠程動作伺服器了,要登出,用exit或者logout命令。
4.2. 密鑰認證
基於口令的認證,需要在使用者每次登入的時候都輸入使用者名稱和口令,顯得比較麻煩。而基於公用密鑰的認證,只需要在第一次輸入密鑰口令,就可以不需要再次輸入,一次分發密鑰後,驗證將由程式自動進行,且安全性比基於口令方式更強。
4.2.1. 原理
SSH雙方,通過相應帳號主目錄下的.ssh目錄中的用戶端金鑰組id_rsa、id_rsa.pub檔案和服務端authorized_keys檔案中密鑰進行驗證。
id_rsa |
自己的rsa私密金鑰 |
id_rsa_pub |
自己的rsa公開金鑰 |
authorized_keys |
存放rsa用戶端的公開金鑰 |
4.2.2. 通訊過程
◆用戶端向ssh伺服器發出串連請求,請求用密匙進行安全驗證,該請求包含請求的帳號和自己的公開金鑰。
◆ssh伺服器收到請求後,先在伺服器的使用者目錄下對應帳號目錄中尋找你的公用密鑰(如/root/.ssh/authorized_keys檔案中),如果找到的公開金鑰與用戶端發來的公開金鑰一致,則開始進行下一步“質詢”。
◆伺服器用該公開金鑰加密“質詢”(challenge)資訊,並發送紿用戶端。
◆用戶端收到加密的質詢資訊後,用自己的金鑰組其解密,並將解密後的資訊發送回伺服器。
◆伺服器驗證用戶端返回的質詢資訊正確後,驗證結束,雙方開始通訊。
4.2.3. 配置方法
在用戶端用以下指令產生金鑰組檔案(補充:後來發現最好是用ssh-keygen -t rsa,有次我在CentOS系統上運行ssh-keygen產生的金鑰組就不是rsa的):
之後將產生的id_rsa.pub檔案內容附加到伺服器對應帳號下的authorized_keys檔案末尾即可,如果沒有該檔案則建立一個,如:/root/.ssh/authorized_keys。有以下兩種操作方法:
◆遠程操作
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.101 |
在CopSSH的Shell中沒法用ssh-copy-i命令,如果用戶端是安裝在linux就可以用該命令了。
◆檔案拷貝到伺服器上操作
先在用戶端用scp命令將檔案拷貝到遠程伺服器:
然後登陸到伺服器,在伺服器上操作,將檔案id_rsa.pub追加到authorized_keys檔案中。操作如下:
4.2.4. 公開金鑰認證無需輸入口令
按以上任一方法配置,以後登陸就無需輸入密碼,如所示:
4.3. 設定主機別名
實際應用中,可能同時需要多套公開金鑰/私密金鑰對。在使用ssh-keygen命令時需要通過-f參數指定不同的私密金鑰名稱。用法如下:
$ ssh-keygen -f ~/.ssh/<filename> |
指定有意義的<filename>名稱,命令執行後,會在~/.ssh目錄下建立指定的公開金鑰/私密金鑰對:檔案<filename>是私密金鑰,檔案<filename.pub>是公開金鑰。
將新生的公開金鑰追加到伺服器主機登陸使用者主名錄下的.ssh/authorized_keys檔案中,就可以使用新建立的公開金鑰建立到遠程主機<server>的<user>賬戶的無口令登陸。
現在客服端存在多個公開金鑰/私密金鑰對,那麼當執行下面的ssh登陸指令時,用到的是哪個公開金鑰呢?
當然是預設公開金鑰~/.ssh/id_rsa.pub。那麼如何用建立的公開金鑰串連server呢?
SSH的用戶端設定檔~/.ssh/config可以通過建立主機別名,在串連主機時選擇使用特定的公開金鑰。例如~/.ssh/config檔案中的下列配置:
host hr user root hostname 192.168.1.101 port 22 identityfile ~/.ssh/id_rsa host hj user root hostname 192.168.1.101 port 22 identityfile ~/.ssh/jiajia |
可以使用下面的SSH登陸命令,
$ ssh hr // 相當於用私密金鑰id_rsa檔案登陸root@192.168.1.101伺服器 $ ssh hj // 相當於用私密金鑰jiajia檔案登陸root@192.168.1.101伺服器 |