ssh基于密鑰的認證及實現

ssh登錄認證方式介紹

大致有以下兩種

  • 基于口令的認證
    這種認證方式就是通過ssh指令以指定用戶名、指定端口等信息后,待連接建立完成,需要輸入用戶名對應的口令來完成認證。一般形如:

[root@localhost ~]# ssh -l lantian 192.168.1.201   #-l表示指定登錄用戶名
The authenticity of host '192.168.1.201 (192.168.1.201)' can't be established.
RSA key fingerprint is 04:2b:f5:62:4a:e6:8a:17:2b:7f:a8:c2:97:f9:d7:c6.
Are you sure you want to continue connecting (yes/no)? yes #回答yes繼續連接,一般第一次與主機建立連接時會有此提示
Warning: Permanently added '192.168.1.201' (RSA) to the list of known hosts.
lantian@192.168.1.201's password:    #輸入密碼完成登錄
Last login: Wed Jan  4 21:52:51 2017 from 192.168.1.102
  • 基于密鑰的認證
    實現基于密鑰的認證,在登錄過程中不需要輸入密碼,客戶端和ssh服務端以密鑰對進行認證,不在網絡中傳輸用戶名和密碼信息,其公鑰存儲于ssh服務端,私鑰當然是存儲在客戶端本地的。認證通過后才能登錄成功?;诿荑€的認證在我們常用的終端軟件上設置好以后,我們在連接Linux主機時可自動登錄,而且比常規ssh口令登錄更加安全,而且服務器之間ssh登錄也可以啟用這種方式省去了輸入口令的過程,而且在修改賬號密碼后也能繼續使用原來的密鑰進行認證。

  • 實現基于密鑰的認證

  • 服務器之間實現密鑰認證

    一般來說,要實現將主機A作為客戶端,登錄作為ssh服務端的主機B就需要有如下操作:

    • 以賬戶a身份登錄主機A

    • 在主機A上生成a賬戶的密鑰對

    • 將a賬戶的公鑰注冊到主機B目標賬戶b的~/.ssh/authorized_keys文件中

    • 將主機B的sshd啟用公鑰認證

    • 驗證主機A是否可以通過密鑰認證的方式登錄主機B
      這樣實現的效果是:先以a的身份登錄主機A,然后在a上可以以b的身份通過密鑰認證的方式登錄到主機B。

  • 以下以兩臺服務器test1和test2為例,實現它們之間以lantian這個賬號可以密鑰登錄。

  • 在test1和test2上分別生成它們各自的密鑰對

test1: 
[lantian@test1 ~]$ ssh-keygen -t dsa   #使用ssh-keygen工具生成test1上lantian賬號的密鑰對,-t指定加密算法為dsa 
Generating public/private dsa key pair. 
Enter file in which to save the key (/home/lantian/.ssh/id_dsa):   #指定密鑰對的保存位置,默認為當前用戶的家目錄下的./ssh目錄 
Enter passphrase (empty for no passphrase): #設置密鑰的密碼,設置以后每次使用到這個密鑰都會需求輸入密碼,不設置就留空 
Enter same passphrase again:  
Your identification has been saved in /home/lantian/.ssh/id_dsa. 
Your public key has been saved in /home/lantian/.ssh/id_dsa.pub. 
The key fingerprint is: 
51:b1:7c:b4:78:7e:f4:fa:dd:24:04:82:bc:81:47:a4 lantian@test1  #這一指紋信息的最后部分表明了密鑰的身份必須是:test1主機上的lantian賬戶。 
 
test2: 
[lantian@test2 ~]$ ssh-keygen -t dsa 
Generating public/private dsa key pair. 
Enter file in which to save the key (/home/lantian/.ssh/id_dsa):  
Enter passphrase (empty for no passphrase):  
Enter same passphrase again:  
Your identification has been saved in /home/lantian/.ssh/id_dsa. 
Your public key has been saved in /home/lantian/.ssh/id_dsa.pub. 
The key fingerprint is: 
c3:63:24:29:dc:7b:12:59:d5:a2:c2:e1:72:e0:ea:9e lantian@test2  #此密鑰對所有者為test2中的lantian賬戶。 

查看test1和test2各自的公鑰
test1:
[lantian@test1 .ssh]$ ll ~/.ssh
total 16
-rw------- 1 lantian lantian 1116 Jan  4 21:05 authorized_keys
-rw------- 1 lantian lantian  668 Jan  5 11:38 id_dsa  #lantian的私鑰
-rw-r--r-- 1 lantian lantian  603 Jan  5 11:38 id_dsa.pub #lantian的公鑰
-rw-r--r-- 1 lantian lantian  395 Dec 30 23:47 known_hosts

test2:
[lantian@test2 .ssh]$ ll ~/.ssh
total 16
-rw-------. 1 lantian lantian 1117 Jan  4 21:54 authorized_keys
-rw-------. 1 lantian lantian  668 Jan  5 11:57 id_dsa     #lantian的私鑰
-rw-r--r--. 1 lantian lantian  603 Jan  5 11:57 id_dsa.pub #lantian的公鑰
-rw-r--r--. 1 lantian lantian  397 Dec  6 20:33 known_hosts

分別在test1和test2上注冊對方的公鑰并進行登錄驗證

[lantian@test1 .ssh]$ ssh-copy-id -i id_dsa.pub lantian@test2  #使用這一指令實現公鑰自動注冊,-i指明要將哪個公鑰注冊到對方服務器上,lantian指明是要注冊到對方服務器哪個賬戶下。
The authenticity of host 'test2 (192.168.1.201)' can't be established.
RSA key fingerprint is 04:2b:f5:62:4a:e6:8a:17:2b:7f:a8:c2:97:f9:d7:c6.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
lantian@test2's password:             #需要先輸入一次密碼進行登錄

Number of key(s) added: 1  #顯示注冊了一個key文件

Now try logging into the machine, with:   "ssh 'lantian@test2'"
and check to make sure that only the key(s) you wanted were added. #提示已經注冊完成,可以進行驗證
[lantian@test1 .ssh]$ ssh lantian@test2
Last login: Wed Jan  4 22:58:28 2017 from 192.168.1.201 
[lantian@test2 ~]$           #成功從test1通過密鑰認證登錄test2

test2:
[lantian@test2 .ssh]$ ssh-copy-id -i id_dsa.pub lantian@test1
lantian@test1's password: 
Now try logging into the machine, with "ssh 'lantian@test1'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[lantian@test2 .ssh]$ ssh lantian@test1
Last login: Thu Jan  5 12:15:30 2017 from test2
[lantian@test1 ~]$       #從test2通過密鑰認證成功登錄test1
  • xshell實現基于密鑰認證

    • 在xshell軟件中選擇“工具”,然后選擇“新建用戶密鑰生成向導”
      ssh基于密鑰的認證及實現

    • 選擇生產密鑰的參數,圖中選擇的是DSA加密算法,密鑰長度2048位。
      ssh基于密鑰的認證及實現

    • 密鑰對生成成功
      ssh基于密鑰的認證及實現

    • 給用戶私鑰取名,設置密碼(可以不設置密碼)
      ssh基于密鑰的認證及實現

    • 保存公鑰為某文件,文件名保持默認即可
      ssh基于密鑰的認證及實現

    • 密鑰對創建完成
      ssh基于密鑰的認證及實現

    • 確認服務器端配置文件/etc/ssh/sshd_config中啟用了PubkeyAuthentication和AuthorizedKeysFile。
      這里只需要確認這兩項不是配置為no且未被注釋掉即可,配置文件中默認為這兩項即為yes,盡管其前面有#,初始狀態下的/etc/ssh/sshd_config中的內容都可以理解為sshd的默認配置。
      ssh基于密鑰的認證及實現

    • 將xshell生成的公鑰添加到/home/lantian/.ssh/authorized_keys文件中
      打開之前保存下來的公鑰文件,然后復制,在vim authorized_keys時粘貼過去。

    • 在xshell中進行登錄驗證
      在xshell中使用ssh lantian@ ,彈出登錄框時,選擇“Public key",然后選擇剛生成的私鑰,如果有設置私鑰密碼一并輸入密碼,然后”確定“即可建立連接。
      ssh基于密鑰的認證及實現
      也可在xshell中新建會話時,即指定此會話的身份驗證方式為Public key,以后在打開這一會話時就會自動登錄,而不用再去手動選擇Public key。

  • SecureCRT實現基于密鑰認證
    SecureCRT要實現基于密鑰的認證,方法和xshell大同小異。先是生成密鑰對,然后將公鑰注冊到SSH服務器,同時在建立的會話屬性,認證方法處只選擇”Public key“,如下所示:
    ssh基于密鑰的認證及實現
    需要注意的是SecureCRT生成密鑰時,格式選擇為”openssh format"。其生成公鑰文件,只能從其保存的文件Identity.pub(默認文件名,可按需修改)文件中查看,只能從它復制,然后在vim authorized_keys時粘貼過去,無法在key生成工具處直接復制。

簡單地總結一下:要想實現A機器的a賬戶密鑰認證登錄B機器的b賬戶上,取決于A機器a賬戶是否保存的有a的私鑰,并且B機器b賬戶中是否保存有a的公鑰。


以上即是ssh密鑰登錄實現的簡單介紹。

原創文章,作者:N24_lantian,如若轉載,請注明出處:http://www.www58058.com/65950

(0)
N24_lantianN24_lantian
上一篇 2017-01-05 15:50
下一篇 2017-01-05 16:57

相關推薦

  • 硬鏈接和軟鏈接的區別

    硬鏈接和軟鏈接的區別 1、概念 在linux中,鏈接可分為兩種:一種為硬鏈接,另一種為軟鏈接。硬鏈接:ln 源文件 目標文件軟鏈接:ln -s(soft)源文件 目標文件 硬鏈接 硬鏈接是指通過索引節點inode來進行鏈接。linux系統中每個文件對應一個inode,并且允許多個文件名指向用一個inode。這種情況的文件就成為硬鏈接。它的作用之一就是允許一個…

    Linux干貨 2017-07-23
  • yum 倉庫

    Yum 倉庫     yum源就是一個軟件集合地,你只需要搜索并安裝你想要的軟件,它會幫你解決大部分軟件的依賴問題。本地源比如說光盤里面一般會附帶一些軟件,這個時候就可以把光盤當成本地源來安裝軟件。網絡源比如說aliyun的鏡像網站,這就屬于網絡源,可以通過互聯網把軟件下載下來并安裝。   yum 倉庫 &n…

    2017-06-24
  • 文本處理和正則表達式練習(0805)

    1、找出ifconfig命令結果中本機的所有IPv4地址     1.1 Centos7     1.2 Centos6 2、查出分區空間使用率的最大百分比值,取各分區利用率的數值 取出各分區數值 取出最大百分比 3、查出用戶UID最大值的用戶名、 UID及shell類型 4、查出/tmp…

    Linux干貨 2016-08-06
  • 初識linux:計算機的組成及功能

    一、描述計算機的組成及功能。 由馮諾伊曼提出計算機體系結構(5大部件)控制器(Controller):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。 (cpu由控…

    2017-12-03
  • Tomcat詳解

    Tomcat詳解 1、tomcat安裝 tomcat的組件:<Server> <Service> <connector/> <connector/> <Engine> <Host /> <Host> <Context/> … </Host> &lt…

    2017-04-27
  • 26期全程班-第七周博客作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; # fdisk /dev/sda # mkf…

    Linux干貨 2017-03-17
欧美性久久久久