1. 程式人生 > >[Linux][入門系列]CentOS 的基礎使用-SSH安裝設定與使用大全(下)-SSH的公祕鑰登入及免密登入設定

[Linux][入門系列]CentOS 的基礎使用-SSH安裝設定與使用大全(下)-SSH的公祕鑰登入及免密登入設定

上一篇blog介紹了我們正常使用SSH進行連線的設定等操作。
SSH同時還支援使用公鑰和祕鑰的方式進行登入,本篇講著重介紹ssh的這項功能

什麼是公祕鑰?

先來一段百科的定義~

公鑰(Public Key)與私鑰(Private Key)是通過一種演算法得到的一個金鑰對(即一個公鑰和一個私鑰),公鑰是金鑰對中公開的部分,私鑰則是非公開的部分。公鑰通常用於加密會話金鑰、驗證數字簽名,或加密可以用相應的私鑰解密的資料。通過這種演算法得到的金鑰對能保證在世界範圍內是唯一的。使用這個金鑰對的時候,如果用其中一個金鑰加密一段資料,必須用另一個金鑰解密。比如用公鑰加密資料就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密,否則解密將不會成功。

簡單的講,公鑰和祕鑰是一對祕鑰對,在計算機裡以一段字串來表示,通過公鑰加密的東東,必須用私鑰才能解密,所以我們通常在ssh的應用中,都會把公鑰放到ssh的服務端,客戶端需要連線時,用私鑰去連線,看是否能夠“解密”,如果可以就允許登入,無法“解密”則不能登入。

設定過程

很多教程使用了:
1. ssh-keygen 建立公鑰和金鑰。
2. ssh-copy-id 把本地主機的公鑰複製到遠端主機的authorized_keys檔案上。
這樣的方式來分配祕鑰對。但是這樣的方式,實質上是在linux裡建立祕鑰對,上傳到linux裡(即客戶機為linux,服務機也為linux)。
鑑於同學用的本地機的系統的不同(Windows、Mac/linux),所以我們將分不同的系統進行相關講解,主要區別在於Windows需要使用第三方軟體建立公祕鑰對。
同時,強烈不建議在ssh服務端上建立公祕鑰對然後把祕鑰下載到本地客戶機上,因為這樣的話,祕鑰檔案會通過網路,大大降低了安全性(公鑰檔案通過網路沒有問題)。

Mac/Linux設定公祕鑰對

由於Mac/Linux使用了Unix核心,所以這裡一併進行演示。
首先開啟本地的終端,生成公祕鑰對

troy@Troy-PC # ssh-keygen -t rsa

這裡-t制定祕鑰型別,預設使用rsa,還有 dsa | ecdsa | ed25519 | rsa | rsa1
這是系統會提示。

Enter file in which to save the key (/Users/tory/.ssh/id_rsa):

這裡可以選擇預設,如果你之前設定過公祕鑰對,建議換個目錄儲存,否則舊的祕鑰會被覆蓋。(我輸入了pri)
之後系統會提示

Enter passphrase (empty
for no passphrase):

如果你想同時使用密碼和祕鑰登入,這裡可以輸入設定你的密碼,如果你想免密登入,這裡直接輸入回車跳過。
當你設定完成之後,你指定的目錄下會有一對檔案

troy@Troy-PC # ls
pri     pri.pub

這裡以pub為尾綴的檔案就是我們的公鑰檔案(public)。下一步我們就要將公鑰檔案傳到伺服器上。

使用ssh-copy-id命令進行上傳

[email protected] # ssh-copy-id -i pri.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "pri.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]192.168.56.101's password:

輸入密碼之後就可以了。
我們嘗試下使用祕鑰登入:

troy@Troy-PC # ssh -i pri [email protected]
Last login: Thu Apr  6 16:33:26 2017 from 192.168.56.1
[root@localhost ~]#

成功了~

Window設定公祕鑰對

由於Windows沒有Linux下這麼方便的命令,所以我們選擇工具來生成祕鑰對。
首先下載Xshell這個軟體,這個軟體有for school的免費版本,用於大家學習。
下載好之後,需要使用正常的使用者名稱密碼方式登入伺服器,之後這裡就需要用這個軟體建立公祕鑰對。

點選工具,新建生成嚮導
這裡寫圖片描述

使用預設設定,下一步。
這裡寫圖片描述
同和在Mac/Linux上面設定一樣,如果你想要免密登入,這裡密碼可以設定為空。

之後我們在這裡可以看到公鑰的程式碼,我們這裡可以選擇複製,也可以選擇儲存檔案。點選完成
這裡寫圖片描述

之後我們需要登入我們當前的伺服器,此時進入.ssh目錄,新建檔案為authorized_keys,然後把剛才複製的公鑰粘進去。

[root@localhost ~]# cd ~/.ssh/
[root@localhost ~]# vim authorized_key

輸入:wq儲存退出。
最重要的一步是,需要給這個檔案賦予許可權,許可權型別600

[root@localhost ~]# chmod 600 authorized_key

這樣我們就可以使用祕鑰登入啦。

另外一種備選方案是,我們使用rz命令(提前安裝yum install lrzsz)將剛才的檔案上傳到伺服器,放到.ssh目錄下,賦予許可權。

TIPS-上傳檔案

上傳檔案除了使用rz命令(在Linux服務端的ssh裡使用),我們同樣可以使用scp命令(在Mac/Linux本地使用)。或者使用sftp工具Xftp(Windows)或者filezilla(Windows或者Mac)。這些相關的詳細內容,我們將在後續給大家介紹。

最後一步-服務端設定

執行完剛才那些,我們來到了最後一步服務端設定,主要是這裡我們可以使用配置檔案把密碼登入這一項關掉,如下,把最後一下改成no.

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

別忘了重啟sshd服務

[root@localhost ~]# service sshd restart
Redirecting to /bin/systemctl restart  sshd.service

這樣一來,我們就沒有辦法使用密碼登入了,只有使用祕鑰才可以登入。

troy@Troy-PC #  ssh [email protected]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

至此,相關ssh的配置就基本結束了,下一篇講講述一些我們使用ssh當中遇到的問題,同學如果有問題,可以直接回復或[email protected],我們在下篇中解答~