爛泥:學習ssh之ssh無密碼登錄

本文由秀依林楓提供友情贊助,首發於爛泥行天下linux

最近一個月沒有寫過文章,主要是剛剛換的新工做。新公司服務器OS使用的是ubuntu server版,和之前熟悉的centos仍是有不少不一樣的。面試

恰好這幾天有時間,也是工做須要,學習了下有關ssh密鑰的知識。shell

在平時的工做中,咱們登錄服務器,通常是使用ssh密碼的方式。其實還有一種方式,那就是經過ssh密鑰登錄服務器。ubuntu

這兩種方法都是ssh的安全驗證方式,,根據驗證方式的不一樣咱們把其分爲:基於密碼的安全驗證和基於密鑰的安全驗證。windows

注意:在一些文章中提到的ssh證書,其實就是ssh密鑰。centos

1、ssh兩種安全驗證介紹安全

經過以上介紹,咱們知道了ssh有兩種安全驗證方式,下面咱們一一介紹其工做原理。服務器

1.1 基於密碼的安全驗證網絡

這種方式,只須要知道遠程服務器的賬號和密碼,就能夠登陸到遠程服務器。全部傳輸的數據都會被加密,可是不能保證你正在鏈接的服務器就是你想鏈接的服務器。可能會有別的服務器在冒充真正的服務器,也就是說這種方式的鏈接有可能會受到「中間人」這種方式的攻擊。ssh

1.2 基於密鑰的安全驗證

這種方式,須要依靠密鑰,也就是說你必須爲本身建立一對密鑰對(公鑰和私鑰),而且把該公鑰放到須要訪問的服務器上。

注意:不能在須要訪問的服務器上建立密鑰,不然沒法經過該密鑰鏈接該服務器,可是經過該密鑰鏈接其餘服務器是正常的。

若是你要鏈接到ssh服務器,ssh客戶端會向ssh服務器發出請求,請求用你的密鑰進行安全驗證。ssh服務器在收到該請求以後,會先在ssh服務器上,檢查你登錄的用戶的主目錄下尋找對應的公鑰,而後把它和你發送過來的公鑰進行比較。若是兩個公鑰一致,ssh服務器就用公鑰加密「質詢」(challenge)並把它發送給ssh客戶端。ssh客戶端在收到「質詢」以後就能夠用你的私鑰解密該「質詢」,再把它發送給ssh服務器。

這種安全驗證方式,你必須知道本身密鑰的加密口令。固然,本身的密鑰也能夠不加密,並且這種不加密密鑰的方式,在平時工做中使用的也比較多。

經過以上對比,咱們能夠很容易看出。與基於密碼的安全驗證相比,基於密鑰的安全驗證是不須要在網絡上傳輸密碼。除此以外,咱們還能夠看出,「中間人」這種攻擊方式也是不可能的(由於他沒有你的私鑰)。

2、測試ssh無密碼登錄

在第一章中咱們介紹了,ssh的兩種安全驗證方式。要達到ssh無密碼登錄服務器,咱們就要使用ssh密鑰驗證這種方式。

PS:本次試驗OS爲Ubuntu 14.04.02 64bit,以下:

uname –a

cat /etc/issue

clip_image001[5]

2.1建立ssh密鑰

經過第一章咱們知道了,要使用ssh密鑰驗證。咱們必需要建立一個ssh密鑰對。

ssh密鑰的建立,咱們能夠有兩種方式。第一就是在linux OS上經過ssh-kengen這個命令來建立,第二就是在windows下經過ssh客戶端工具來建立。

下面咱們對其建立密鑰的方法一一進行介紹,以下。

2.1.1 經過ssh-kengen命令建立密鑰

使用ssh-kengen命令建立ssh密鑰很簡單,直接使用該命令建立便可。以下:

ssh-keygen

clip_image002[4]

經過上圖,咱們能夠很明顯的看出剛剛新建立的密鑰存放在/home/ilanni/.ssh目錄下,並且私鑰文件是id_rsa,公鑰文件是id_rsa.pub

除此以外,咱們還須要注意ssh-kengen命令中:

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

這兩行是表示設置私鑰的加密密碼,咱們在此是沒有設置私鑰的加密密碼。

如今咱們來查看密鑰的文件屬性,以下:

ll .ssh/

clip_image003[4]

經過上圖,咱們能夠很明顯的看出:

.ssh目錄的用戶權限是700,私鑰id_rsa的權限是600,公鑰id_rsa.pub的權限是644。

注意:有關私鑰id_rsa和公鑰id_rsa.pub文件權限很是重要,若是權限沒有設置對的話,在使用ssh密鑰登錄時,系統仍是會提示須要輸入密碼。

ssh-keygen默認使用的密鑰加密類型是rsa,這個咱們能夠經過查看公鑰文件id_rsa.pub得知。以下:

cat .ssh/id_rsa.pub

clip_image004[4]

若是要使用其餘類型的加密方式,咱們能夠經過ssh-keygen的-t參數來指定使用的加密類型。以下:

ssh-keygen -t dsa

clip_image005[4]

cat .ssh/id_dsa.pub

clip_image006[4]

有關ssh-kengen命令的詳細使用方法,咱們能夠經過查看ssh-kengen的幫助命令得到。以下:

ssh-keygen --help

clip_image007[4]

注意:該密鑰是在192.168.1.8機器上生成的,以下:

hostname

ifconfig

clip_image008[4]

2.1.2 經過xshell建立密鑰

windows下ssh客戶端的鏈接工具比較多,可是我使用最多的仍是xshell這個工具。

下面咱們就經過xshell工具,來建立ssh的密鑰。

打開xshell,點擊「工具」--「新建用戶密鑰生成嚮導」,以下:

clip_image009[4]

下面這個界面,咱們能夠選擇密鑰的類型和密鑰的長度,以下:

clip_image010[4]

生成密鑰對,以下:

clip_image011[4]

輸入密鑰名稱以及密鑰的加密密碼,以下:

clip_image012[4]

注意:這個密鑰的加密密碼就是ssh私鑰的加密密碼,咱們能夠爲空。

爲了下面試驗區分經過ssh-kengen生成的密鑰id_rsa,在此密鑰的名稱咱們命名爲id_rsa_1024。

生成公鑰,以下:

clip_image013[4]

公鑰生成後,咱們須要把該公鑰保存到一個文件中。以下:

clip_image014[4]

公鑰保存完畢後,xshell就會跳轉到私鑰的界面。以下:

clip_image015[4]

經過上圖,咱們能夠看到目前私鑰的名稱就是咱們前面命名的id_rsa_1024,並且密鑰的長度是1024字節。

如今咱們來導出該私鑰,以下:

clip_image016[4]

這樣咱們就獲得了一對ssh密鑰,以下:

clip_image017[4]

2.2 上傳ssh公鑰

在2.1章節中,咱們已經建立好了ssh的公鑰與私鑰,如今咱們開始把公鑰上傳到須要被訪問的服務器上,即ssh服務器上。

在把公鑰上傳到ssh服務器上,咱們還有幾件事要作:

1)、肯定要登錄ssh服務器的用戶

2)、修改ssh服務器的ssh配置文件sshd_config

3)、建立authorized_keys文件

4)、上傳公鑰並把內容重定向到authorized_keys文件

注意:本章節是在192.168.1.7機器上操做,以下:

hostname

ifconfig

clip_image018[4]

2.2.1 肯定要登錄ssh服務器的用戶

由於咱們是要免密碼登錄ssh服務器,因此咱們必需要肯定使用哪個用戶登錄ssh服務器。

注意:該用戶必定要在ssh服務器存在,而且是能夠登錄ssh服務器的。

在此咱們使用的是ilanni這個用戶登錄ssh服務器的。以下:

whoami

cat /etc/passwd |grep ilanni

clip_image019[4]

2.2.2 修改ssh配置

ssh存放用戶登錄的公鑰是經過sshd_config文件配置的,可是默認該選項是沒有啓用的。須要咱們經過修改sshd_config文件來啓用,以下:

sudo vi /etc/ssh/sshd_config

clip_image020[4]

咱們只須要把#AuthorizedKeysFile %h/.ssh/authorized_keys行前的#去掉便可。以下:

clip_image021[4]

AuthorizedKeysFile存放該用戶能夠用來登陸的RSA/DSA公鑰。該指令中%h表示用戶的主目錄,最後公鑰會存放到主目錄的.ssh/authorized_keys文件中。

注意:這個步驟不是必須的,由於經過ssh-copy-id命令進行配置時,就無需修改ssh配置文件。

2.2.3 建立authorized_keys文件

在上一章節中,咱們知道了用戶的公鑰是存放在authorized_keys文件中的,如今咱們來建立該文件。

先建立.ssh目錄並修改其用戶屬性,以下:

mkdir .ssh

chmod 700 .ssh

clip_image022[4]

.ssh目錄建立完畢後,咱們如今來建立authorized_keys文件。以下:

touch authorized_keys

clip_image023[4]

2.2.4 把公鑰內容重定向到authorized_keys文件

在2.1章節中,咱們介紹了ssh密鑰的生成方法。一是經過ssh-kengen命令生成,二是經過xshell生成。

咱們如今把這兩個公鑰都上傳到192.168.1.7機器上,而後重定向到authorized_keys文件中。以下:

clip_image024[4]

把192.168.1.8公鑰複製到192.168.1.7機器上,以下:

scp .ssh/id_rsa.pub ilanni@192.168.1.7:/home/ilanni

clip_image025[4]

把xshell生成的公鑰上傳到192.168.1.7上,以下:

clip_image026[4]

如今把兩個公鑰都重定向到authorized_keys文件,以下:

cat id_rsa.pub >.ssh/authorized_keys

cat id_rsa_1024.pub>>.ssh/authorized_keys

cat .ssh/authorized_keys

clip_image027[4]

2.3 鏈接ssh服務器

公鑰上傳完畢後,咱們來鏈接ssh服務器,也就是鏈接192.168.1.7機器。

鏈接192.168.1.7,咱們也能夠分爲linux和windows,下面對其鏈接方法一一講解。

2.3.1 在linux上鍊接ssh服務器

咱們先在linux機器192.168.1.8上鍊接192.168.1.7,以下:

ssh ilanni@192.168.1.7

ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

clip_image028[4]

經過上圖,咱們能夠很明顯的看出在192.168.1.8上鍊接192.168.1.7時,系統沒有提示咱們輸入密碼。

這也就實現了,咱們免密碼登錄ssh服務器的功能。

2.3.2 在windows上鍊接ssh服務器

咱們如今切換到windows系統上,來鏈接192.168.1.7。 ssh客戶端工具,咱們使用的仍是xshell,仍是在生成密鑰的那臺windows機器上。以下:

ssh ilanni@192.168.1.7

clip_image029[4]

注意:用戶身份驗證方法,在此咱們須要選擇的是Public Key也就是密鑰驗證方式,而且用戶密鑰就是咱們前面生成時的密鑰時的私鑰id_rsa_1024。

clip_image030[4]

經過上圖,咱們能夠很明顯的看到在windows客戶端鏈接192.168.1.7,系統也沒有要求咱們輸入密碼,這也就實現了ssh的無密碼登錄。

2.4 使用ssh-copy-id上傳ssh公鑰

看了第2.2章節有關上傳ssh公鑰,你是否是以爲很麻煩。其實ssh還給咱們提供了另一個命令ssh-copy-id,ssh-copy-id命令能夠把上述的步驟一次性執行完畢。

注意:ssh-copy-id命令只存在於linux系統中,目前沒有發現windows系統的ssh客戶端工具備該命令。

ssh-copy-id命令使用方法,以下:

ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

ssh-copy-id -i .ssh/id_rsa.pub ilanni@192.168.1.9

clip_image031[4]

cat .ssh/id_rsa.pub

clip_image032[4]

登錄192.168.1.9,查看公鑰。以下:

ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

ll --full-time .ssh/

clip_image033[4]

cat .ssh/authorized_keys

clip_image034[4]

經過以上兩張截圖,咱們很明顯的看出,使用ssh-copy-id命令能夠直接在ssh服務器對應用戶的家目錄下建立.ssh目錄,而且在該目錄下建立authorized_keys文件。同時也會把公鑰id_rsa.pub文件中的內容,複製到authorized_keys文件中。

查看ssh配置文件是否修改。以下:

cat /etc/ssh/sshd_config |grep authorized_keys

clip_image035[4]

經過上圖,咱們能夠很明顯的看出ssh-copy-id沒有修改ssh配置。

如今咱們來鏈接192.168.1.9測試下,以下:

ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

ssh ilanni@192.168.1.9

clip_image036[4]

經過上圖,咱們能夠很明顯的看到即便不修改ssh的配置文件,只要有authorized_keys文件,也能實現ssh的無密碼登錄。

有關ssh-copy-id詳細的使用方法,能夠查看其幫助命令。以下:

ssh-copy-id -h

clip_image037[4]

以上就是有關ssh無密碼登錄的所有內容。

相關文章
相關標籤/搜索