SSH登錄方式
接觸過Linux服務器的同學肯定用過SSH協議登錄系統,通常SSH協議都有兩種登錄方式:密碼口令登錄和公鑰登陸。
一、密碼口令(類似於賬號密碼登錄)
1.客戶端連接服務器,服務器把公鑰發給客戶端
2.客戶端輸入登錄口令,並用服務器公鑰加密后提交給服務器
3.服務器用私鑰解密,結果匹配,則允許登錄
二、公鑰登錄(一般用RSA非對稱加密)
1.客戶端生成密鑰對
2.將客戶端的公鑰寫入服務器的密鑰驗證文件
3.客戶端請求登錄,服務器生成一段隨機字符串,並使用客戶端公鑰加密后發送給客戶端
5.客戶端使用自己的私鑰解密,並返回解密后的信息到服務器
6.服務器進行信息對比,如果結果匹配,則允許登錄
SSH公鑰登陸
生成秘鑰
生成秘鑰,Windows/Linux通用:
# -t:指定秘鑰類型,不指定默認為RSA
# -C:注釋,可以不用設置,主要用於識別秘鑰,可以寫郵箱、用戶名等信息
# -b:秘鑰長度,默認2048位,一般不用設置
ssh-keygen -t rsa -C "www.guitu18.com"
以Windows演示(Linux是一樣的),這里會有三次確認輸入,第一個是設置秘鑰保存的路徑,第二個和第三個是設置秘鑰的密碼。默認秘鑰保存路徑不用修改,如果不設置密碼直接按三次Enter即可。
之后你就能在當前用戶目錄下的.ssh
目錄看到生成的公鑰和私鑰了
同步發表於:https://www.guitu18.com/post/2020/05/01/71.html
服務器開啟公鑰登陸
接着就是將我們的公鑰寫入服務器的密鑰驗證文件了,在寫入前我們還要在服務器開啟密鑰登陸。
修改sshd配置文件:vim /etc/ssh/sshd_config
這里你需要關注的參數有三個,逐一說明:
# 公鑰登錄開關,默認是關閉的,將他打開,修改為 yes
PubkeyAuthentication yes
# 秘鑰驗證文件,默認值為 .ssh/authorized_keys 通常不用修改
AuthorizedKeysFile .ssh/authorized_keys
# 密碼登錄開關,默認開啟(在公鑰登錄調試完成前你可以先開啟密碼登錄)
PasswordAuthentication no
如果你有看過其他配置教程,你可能還會看到要你開啟一個RSAAuthentication的參數:
# 這個參數在CentOS 7.4之后棄用了
RSAAuthentication yes
如果你的系統是CentOS 7.4及以后,你在 /etc/ssh/sshd_config
文件中會找不到這個參數,不用理會也不用將它加進來,SSH第二代協議已經將它廢棄了。
修改完成后重啟sshd服務即可:
# 也可以用這個命令:service sshd restart
systemctl restart sshd
將公鑰寫入服務器
現在你需要把你本地生成的公鑰信息寫入秘鑰驗證文件,也就是 .ssh/authorized_keys
文件,你可以將你的公鑰上傳到服務的~/.ssh/
目錄后改名為 authorized_keys,也可以用文本編輯器將公鑰打開,復制文本內容到服務器的authorized_keys文件里(配置多態客戶端公鑰時,換行后直接往后面追加公鑰內容即可)。
vim ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp29fDtYdrHaj6l+QAs4RXvkFaoct1mYlKrQze4MQDN1d308SbVLPgY6F3D80MMpdfu9fpKZzNbpgzCWkncfzX8ClJts2AaT1smsr23ubFnq6/OOPXQJi2zIagOorSn+KjME8gHOfraGn1vNKJemdmpqDe+jmWTzlAaGecUHoh+fWwBl5lA/Cz62OJ1k/O3TwLF7sn3QPLggv3CdZ8y3Vh1k6XN9GCtUlL/TujK3iYGHE3410AOLdNb56+t6k/NJJZwpH/x77Zf6sWsZo8Ri/tFGhsCKIniu56o+m6R3/Ar40LOz6gmfJbwfQsqwNGh67/LtO00QDm6qfpEdNkz2v1 www.guitu18.com
使用公鑰登陸
現在你使用你的公鑰來登錄服務器了,這里以Xshll舉例,點擊鏈接服務器之后,會彈出認證窗口(我關閉了密碼登錄所以密碼選項是灰色的)。點擊 [瀏覽] > [用戶秘鑰] ,在彈出的界面點擊 [導入],選擇你之前生成的秘鑰對中的私鑰(是私鑰不要選錯了),如果在生成秘鑰的時候設置了密碼在導入時也需要輸入密碼。
導入成功后返回認證窗口選擇剛導入的秘鑰登錄,如果生成秘鑰的時候設置了密碼,在用秘鑰登錄時也需要輸入密碼,口令正確即可登錄成功了。
細心的朋友應該看到在證書導入的界面有一個生成按鈕,是的,Xhell也可以幫我們生成證書,而且是圖形化界面操作(Linux非圖形模式只能用命令行生成),非常友好,其實大部分SSH連接工具都帶了生成秘鑰的功能,感興趣的可以自己嘗試一下。
RSA加密
說RSA加密要先說兩個概念:對稱加密和非對稱加密
對稱加密:
對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。對稱加密有很多種算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。對稱加密通常使用的是相對較小的密鑰,一般小於256 bit。因為密鑰越大,加密越強,但加密與解密的過程越慢。如果你只用1 bit來做這個密鑰,那黑客們可以先試着用0來解密,不行的話就再用1解;但如果你的密鑰有1 MB大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間。密鑰的大小既要照顧到安全性,也要照顧到效率。對稱加密的一大缺點是密鑰的管理與分配,換句話說,如何把密鑰發送到需要解密你的消息的人的手里是一個問題。在發送密鑰的過程中,密鑰有很大的風險會被黑客們攔截。現實中通常的做法是將對稱加密的密鑰進行非對稱加密,然后傳送給需要它的人。
非對稱加密:
非對稱加密為數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人。非對稱加密使用這對密鑰中的一個進行加密,而解密則需要另一個密鑰。比如,你向銀行請求公鑰,銀行將公鑰發給你,你使用公鑰對消息加密,那么只有私鑰的持有人--銀行才能對你的消息解密。與對稱加密不同的是,銀行不需要將私鑰通過網絡發送出去,因此安全性大大提高。目前最常用的非對稱加密算法是RSA算法。雖然非對稱加密很安全,但是和對稱加密比起來,它非常的慢,所以我們還是要用對稱加密來傳送消息,但對稱加密所使用的密鑰我們可以通過非對稱加密的方式發送出去。
非對稱加密在很多地方都有應用,如HTTPS。HTTPS的非對稱加密還涉及到一個CA證書頒發機構,先通過CA根證書以非對稱加密的方式進行認證,然后再從服務器拿到公鑰,之后再用公鑰加密傳輸對稱加密要用到的秘鑰,這樣就保證了對稱加密證書的安全性,接着就可以愉快的用對稱加密來進行通信了。
非對稱加密在這里有兩個作用:認證和安全傳輸對稱加密秘鑰。為啥不用非對稱加密直接通信呢?前面說過,非對稱加密確實安全,但是它慢啊,而且非常慢。在保證了對稱加密證書的可靠性之后,對稱加密的通信也是安全的,那么后面就可以直接用更高效的對稱加密通信了。