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軟件中選擇“工具”,然后選擇“新建用戶密鑰生成向導”
-
選擇生產密鑰的參數,圖中選擇的是DSA加密算法,密鑰長度2048位。
-
密鑰對生成成功
-
給用戶私鑰取名,設置密碼(可以不設置密碼)
-
保存公鑰為某文件,文件名保持默認即可
-
密鑰對創建完成
-
確認服務器端配置文件/etc/ssh/sshd_config中啟用了PubkeyAuthentication和AuthorizedKeysFile。
這里只需要確認這兩項不是配置為no且未被注釋掉即可,配置文件中默認為這兩項即為yes,盡管其前面有#,初始狀態下的/etc/ssh/sshd_config中的內容都可以理解為sshd的默認配置。 -
將xshell生成的公鑰添加到/home/lantian/.ssh/authorized_keys文件中
打開之前保存下來的公鑰文件,然后復制,在vim authorized_keys時粘貼過去。 -
在xshell中進行登錄驗證
在xshell中使用ssh lantian@ ,彈出登錄框時,選擇“Public key",然后選擇剛生成的私鑰,如果有設置私鑰密碼一并輸入密碼,然后”確定“即可建立連接。
也可在xshell中新建會話時,即指定此會話的身份驗證方式為Public key,以后在打開這一會話時就會自動登錄,而不用再去手動選擇Public key。
-
SecureCRT實現基于密鑰認證
SecureCRT要實現基于密鑰的認證,方法和xshell大同小異。先是生成密鑰對,然后將公鑰注冊到SSH服務器,同時在建立的會話屬性,認證方法處只選擇”Public key“,如下所示:
需要注意的是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