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
下一篇 2017-01-05

相關推薦

  • N25第五周博客作業

    第五周博客作業   1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;   2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;   3、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行; &nbs…

    Linux干貨 2016-12-28
  • 破壞grub實驗之一

    1、刪除grub stage1階段 [root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1 1+0 records in 1+0 records out 446 bytes …

    Linux干貨 2016-09-19
  • Bash 的配置文件

    有時候,在定義了別名 alilas cls=clear  , 或者定義了 umask=033 等等,在logout 用戶后再登錄,會失效,因為這些本地變量,僅對當前shell生效。而要保留配置,使其永久生效,就需要將這些定義的寫入配置文件中保存。下面介紹下bash的配置文件:  Bash的配置文件可以分為: profile類: /etc/…

    Linux干貨 2015-04-04
  • Linux用戶和組管理類命令以及文本處理工具的各種實例

    列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 取出最后登錄到當前系統的用戶的相關信息。 取出當前系統上被用戶當作其默認shell的最多的那個shell。 將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。 取出當前主機的IP地址,提示:對i…

    2018-03-13
  • NET25-第11周作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 第一步:他們需要實現協商好對稱加密算法,單向加密算法,公鑰加密算法,交換公鑰等。 第二步:B用戶想要將數據傳給A,首先需要使用單向加密算法取出數據的特征碼,并用自己的私鑰對這段特征碼進行加密(數字簽名),B用戶生成臨時對稱密鑰,并用對稱密鑰加密整段數據,B用戶使用 A用戶的公鑰加密一次性對稱密鑰,附加在整段數據…

    Linux干貨 2017-05-15
  • date(時間),timedatectl(時區),cal(日歷)的用法

    date+%F 顯示日期,   顯示格式如 2017-07-15+%T 顯示時間    顯示格式如 15:00:15+%Y 顯示年      顯示格式如 2017+%m 月 +%d 日+%H 時+%M 分+%S 秒+%s 從linux初始到現在經歷了多少秒+%w 顯示數字形式的星期+%a …

    Linux干貨 2017-07-14
欧美性久久久久