- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機(jī)構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機(jī)構(gòu):新網(wǎng)數(shù)碼
SSH使用密鑰登錄服務(wù)器
SSH 密鑰登錄
SSH 默認(rèn)采用密碼登錄,這種方法有很多缺點(diǎn),簡單的密碼不安全,復(fù)雜的密碼不容易記憶,每次手動輸入也很麻煩。密鑰登錄是更好的解決方案。
密鑰是什么
密鑰(key)是一個非常大的數(shù)字,通過加密算法得到。對稱加密只需要一個密鑰,非對稱加密需要兩個密鑰成對使用,分為公鑰(public key)和私鑰(private key)。
SSH 密鑰登錄采用的是非對稱加密,每個用戶通過自己的密鑰登錄。其中,私鑰必須私密保存,不能泄漏;公鑰則是公開的,可以對外發(fā)送。它們的關(guān)系是,公鑰和私鑰是一一對應(yīng)的,每一個私鑰都有且僅有一個對應(yīng)的公鑰,反之亦然。
如果數(shù)據(jù)使用公鑰加密,那么只有使用對應(yīng)的私鑰才能解密,其他密鑰都不行;反過來,如果使用私鑰加密(這個過程一般稱為“簽名”),也只有使用對應(yīng)的公鑰解密。
密鑰登錄的過程
SSH 密鑰登錄分為以下的步驟。
預(yù)備步驟,客戶端通過ssh-keygen或者用軟件生成自己的公鑰和私鑰。
第一步,手動將客戶端的公鑰放入遠(yuǎn)程服務(wù)器的指定位置。
第二步,客戶端向服務(wù)器發(fā)起 SSH 登錄的請求。
第三步,服務(wù)器收到用戶 SSH 登錄的請求,發(fā)送一些隨機(jī)數(shù)據(jù)給用戶,要求用戶證明自己的身份。
第四步,客戶端收到服務(wù)器發(fā)來的數(shù)據(jù),使用私鑰對數(shù)據(jù)進(jìn)行簽名,然后再發(fā)還給服務(wù)器。
第五步,服務(wù)器收到客戶端發(fā)來的加密簽名后,使用對應(yīng)的公鑰解密,然后跟原始數(shù)據(jù)比較。如果一致,就允許用戶登錄。
實(shí)驗(yàn)一 客戶端192.168.13.32 連接 服務(wù)器 47.109.94.84
生成密鑰:ssh-key
密鑰登錄時,客戶端首先需要生成公鑰和私鑰。
OpenSSH 提供了一個工具程序ssh-keygen命令,用來生成密鑰。
直接輸入ssh-keygen,程序會詢問一系列問題,然后生成密鑰。
ssh-keygen
通常做法是使用-t參數(shù),指定密鑰的加密算法。
ssh-keygen -t dsa
上面示例中,-t參數(shù)用來指定密鑰的加密算法,一般會選擇dsa算法或rsa算法。注意,這個參數(shù)沒有默認(rèn)值。
執(zhí)行ssh-keygen命令以后,會出現(xiàn)第一個問題,詢問密鑰保存的文件名,默認(rèn)是~/.ssh/id_dsa文件,這個是私鑰的文件名,對應(yīng)的公鑰文件~/.ssh/id_dsa.pub是自動生成的。用戶的密鑰一般都放在主目錄的.ssh目錄里面。
如果選擇rsa算法,生成的密鑰文件默認(rèn)就會是~/.ssh/id_rsa(私鑰)和~/.ssh/id_rsa.pub(公鑰)。
接著,就會是第二個問題,詢問是否要為私鑰文件設(shè)定密碼保護(hù)(passphrase)。這樣的話,即使入侵者拿到私鑰,還是需要破解密碼。如果為了方便,不想設(shè)定密碼保護(hù),可以直接按回車鍵,密碼就會為空。后面還會讓你再輸入一次密碼,兩次輸入必須一致。注意,這里“密碼”的英文單詞是 passphrase,這是為了避免與 Linux 賬戶的密碼單詞 password 混淆,表示這不是用戶系統(tǒng)賬戶的密碼。
最后,就會生成私鑰和公鑰,屏幕上還會給出公鑰的指紋,以及當(dāng)前的用戶名和主機(jī)名作為注釋,用來識別密鑰的來源。
上面示例中,末尾的root@localhost.localdomain是公鑰的注釋,用來識別不同的公鑰,表示這是哪臺主機(jī)的哪個用戶的公鑰,不是必需項(xiàng)。
注意,公鑰只有一行。因?yàn)樗L了,所以上面分成三行顯示。
下面的命令可以列出用戶所有的公鑰。
ls -l ~/.ssh/id_*.pub
生成密鑰以后,建議修改它們的權(quán)限,防止其他人讀取。
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa.pub
ssh-keygen命令的相關(guān)選項(xiàng)
(1)-b
-b參數(shù)指定密鑰的二進(jìn)制位數(shù)。這個參數(shù)值越大,密鑰就越不容易破解,但是加密解密的計算開銷也會加大。
一般來說,-b至少應(yīng)該是1024,更安全一些可以設(shè)為2048或者更高。
(2)-C
-C參數(shù)可以為密鑰文件指定新的注釋,格式為username@host。
下面命令生成一個4096位 RSA 加密算法的密鑰對,并且給出了用戶名和主機(jī)名。
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
(3)-f
-f參數(shù)指定生成的私鑰文件。
ssh-keygen -t dsa -f mykey
上面命令會在當(dāng)前目錄生成私鑰文件mykey和公鑰文件mykey.pub。
(4)-F
-F參數(shù)檢查某個主機(jī)名是否在known_hosts文件里面。
ssh-keygen -F example.com
(5)-N
-N參數(shù)用于指定私鑰的密碼(passphrase)。
ssh-keygen -t dsa -N secretword
(6)-p
-p參數(shù)用于重新指定私鑰的密碼(passphrase)。它與-N的不同之處在于,新密碼不在命令中指定,而是執(zhí)行后再輸入。ssh 先要求輸入舊密碼,然后要求輸入兩遍新密碼。
(7)-R
-R參數(shù)將指定的主機(jī)公鑰指紋移出known_hosts文件。
ssh-keygen -R example.com
(8)-t
-t參數(shù)用于指定生成密鑰的加密算法,一般為dsa或rsa
手動上傳公鑰
生成密鑰以后,公鑰必須上傳到服務(wù)器,才能使用公鑰登錄。
OpenSSH 規(guī)定,用戶公鑰保存在服務(wù)器的~/.ssh/authorized_keys文件。你要以哪個用戶的身份登錄到服務(wù)器,密鑰就必須保存在該用戶主目錄的~/.ssh/authorized_keys文件。只要把公鑰添加到這個文件之中,就相當(dāng)于公鑰上傳到服務(wù)器了。每個公鑰占據(jù)一行。如果該文件不存在,可以手動創(chuàng)建。
mkdir ~/.ssh
vi ~/.ssh/authorized_keys
用戶可以手動編輯該文件,把公鑰粘貼進(jìn)去,也可以在本機(jī)計算機(jī)上,執(zhí)行下面的命令。
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
或者直接將公鑰文件內(nèi)容復(fù)制到服務(wù)器即可
注意,authorized_keys文件的權(quán)限要設(shè)為644,即只有文件所有者才能寫。如果權(quán)限設(shè)置不對,SSH 服務(wù)器可能會拒絕讀取該文件。
chmod 644 ~/.ssh/authorized_keys
只要公鑰上傳到服務(wù)器,下次登錄時,OpenSSH 就會自動采用密鑰登錄,不再提示輸入密碼。
ssh -l root 47.109.94.84
上面例子中,SSH 客戶端使用私鑰之前,會要求用戶輸入密碼(passphrase),用來解開私鑰。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP