Linux?服務器上配置基于SSH?密鑰的身份驗證及使用方法
介紹
SSH(Secure Shell)是一種加密協(xié)議,用于管理和與服務器通信。在使用 Linux 服務器時,您經(jīng)常會花費大量時間在通過 SSH 連接到服務器的終端會話中。
雖然有幾種不同的登錄 SSH 服務器的方式,但在本指南中,我們將專注于設置 SSH 密鑰。SSH 密鑰提供了一種非常安全的登錄服務器的方式。因此,這是我們建議所有用戶使用的方法。
SSH 密鑰是如何工作的?
SSH 服務器可以使用各種不同的方法對客戶端進行身份驗證。其中最基本的是密碼身份驗證,這種方法易于使用,但并不是最安全的。
盡管密碼以安全的方式發(fā)送到服務器,但它們通常不夠復雜或長以抵御重復和持續(xù)的攻擊者?,F(xiàn)代處理能力結(jié)合自動化腳本使得破姐受密碼保護的帳戶成為可能。雖然還有其他方法可以增加額外的安全性(例如 fail2ban
等),但 SSH 密鑰被證明是一種可靠和安全的替代方法。
SSH 密鑰對是兩個密碼安全的密鑰,可用于對客戶端進行 SSH 服務器身份驗證。每個密鑰對包括一個公鑰和一個私鑰。
私鑰由客戶端保留,應絕對保密。私鑰的任何泄露都將允許攻擊者在不需要額外身份驗證的情況下登錄配置有相關公鑰的服務器。作為額外的預防措施,密鑰可以在磁盤上使用密碼短語進行加密。
相關的公鑰可以自由共享,不會產(chǎn)生任何負面影響。公鑰可用于加密只有私鑰可以解密的消息。這一特性被用作使用密鑰對進行身份驗證的一種方式。
公鑰被上傳到您希望能夠通過 SSH 登錄的遠程服務器。該密鑰被添加到您將要登錄的用戶帳戶中的一個特殊文件中,稱為 ~/.ssh/authorized_keys
。
當客戶端嘗試使用 SSH 密鑰進行身份驗證時,服務器可以測試客戶端是否擁有私鑰。如果客戶端能夠證明自己擁有私鑰,將會生成一個 shell 會話或執(zhí)行請求的命令。
步驟 1 —— 創(chuàng)建 SSH 密鑰
配置 SSH 密鑰身份驗證到您的服務器的第一步是在本地計算機上生成 SSH 密鑰對。
為此,我們可以使用一個名為 ssh-keygen
的特殊實用程序,它包含在標準 OpenSSH 工具套件中。默認情況下,這將創(chuàng)建一個 3072 位的 RSA 密鑰對。
在本地計算機上,通過輸入以下命令生成 SSH 密鑰對:
[本地環(huán)境] ssh-keygen
[本地環(huán)境] 生成公鑰/私鑰 rsa 密鑰對。 輸入要保存密鑰的文件(/home/username/.ssh/id_rsa):
該實用程序?qū)⑻崾灸x擇要生成的密鑰的位置。默認情況下,密鑰將存儲在用戶主目錄中的 ~/.ssh
目錄中。私鑰將被稱為 id_rsa
,相關的公鑰將被稱為 id_rsa.pub
。
通常,在這個階段最好使用默認位置。這樣做將允許您的 SSH 客戶端在嘗試進行身份驗證時自動找到您的 SSH 密鑰。如果您想選擇非標準路徑,請現(xiàn)在輸入該路徑,否則按 ENTER
接受默認值。
如果您之前生成過 SSH 密鑰對,您可能會看到類似以下的提示:
[本地環(huán)境] /home/username/.ssh/id_rsa 已經(jīng)存在。 覆蓋(y/n)?
如果選擇覆蓋磁盤上的密鑰,您將無法再使用先前的密鑰進行身份驗證。在選擇是時要非常小心,因為這是一個不可逆轉(zhuǎn)的破壞性過程。
[本地環(huán)境] 創(chuàng)建目錄 '/home/username/.ssh'。 輸入密碼短語(留空表示沒有密碼短語): 再次輸入密碼短語:
接下來,您將被提示為密鑰輸入密碼短語。這是一個可選的密碼短語,可用于加密磁盤上的私鑰文件。
您可能會想知道,如果您仍然需要輸入密碼短語,SSH 密鑰提供了哪些優(yōu)勢。其中一些優(yōu)勢包括:
- 私有 SSH 密鑰(可以受密碼短語保護的部分)永遠不會在網(wǎng)絡上暴露。密碼短語僅用于在本地機器上解密密鑰。這意味著網(wǎng)絡基礎的破姐將無法針對密碼短語進行。
- 私鑰保存在受限制的目錄中。SSH 客戶端將不會識別未保存在受限制目錄中的私鑰。密鑰本身也必須具有受限制的權限(僅對所有者可用的讀和寫權限)。這意味著系統(tǒng)上的其他用戶無法窺視。
- 任何希望破解私有 SSH 密鑰密碼短語的攻擊者必須已經(jīng)訪問系統(tǒng)。這意味著他們已經(jīng)可以訪問您的用戶帳戶或 root 帳戶。如果您處于這種位置,密碼短語可以防止攻擊者立即登錄到您的其他服務器。這將希望給您時間創(chuàng)建和實施新的 SSH 密鑰對,并從受損的密鑰中刪除訪問權限。
由于私鑰永遠不會暴露在網(wǎng)絡上,并且通過文件權限進行保護,因此該文件永遠不應該對除您(和root用戶)以外的任何人可訪問。密碼短語作為一個額外的保護層,以防這些條件被破壞。
密碼短語是一個可選的附加項。如果輸入密碼短語,您將需要在每次使用該密鑰時提供它(除非您正在運行存儲解密密鑰的 SSH 代理軟件)。我們建議使用密碼短語,但如果您不想設置密碼短語,可以按 ENTER
跳過此提示。
[本地環(huán)境] 您的標識已保存在 /home/username/.ssh/id_rsa。 您的公鑰已保存在 /home/username/.ssh/id_rsa.pub。 密鑰指紋為: SHA256:CAjsV9M/tt5skazroTc1ZRGCBz+kGtYUIPhRvvZJYBs username@hostname 密鑰的隨機藝術圖像為: +---[RSA 3072]----+ |o ..oo.++o .. | | o o +o.o.+... | |. . + oE.o.o . | | . . oo.B+ .o | | . .=S.+ + | | . o..* | | .+= o | | .=.+ | | .oo+ | +----[SHA256]-----+
現(xiàn)在您有了可以用于身份驗證的公鑰和私鑰。下一步是將公鑰放在您的服務器上,以便您可以使用 SSH 密鑰身份驗證登錄。
步驟 2 —— 將 SSH 公鑰復制到您的服務器
有多種方法可以將您的公鑰上傳到遠程 SSH 服務器。您使用的方法在很大程度上取決于您可用的工具和當前配置的細節(jié)。
以下方法都會產(chǎn)生相同的最終結(jié)果。最簡單、最自動化的方法首先描述,其后的方法都需要額外的手動步驟。如果可以使用前面的方法,則應該遵循這些方法。
使用 ssh-copy-id 復制您的公鑰
將公鑰復制到現(xiàn)有服務器的最簡單方法是使用一個名為 ssh-copy-id
的實用程序。由于其簡單性,如果可用,建議使用此方法。
ssh-copy-id
工具包含在許多發(fā)行版的 OpenSSH 軟件包中,因此您的本地系統(tǒng)上可能已經(jīng)有它。為使此方法工作,您必須當前具有基于密碼的 SSH 訪問權限到您的服務器。
要使用此實用程序,您需要指定您想要連接到的遠程主機和您具有基于密碼的 SSH 訪問權限的用戶帳戶。這是您的公共 SSH 密鑰將被復制的帳戶。
語法是:
[本地環(huán)境] ssh-copy-id username@remote_host
您可能會看到類似以下的消息:
[本地環(huán)境] The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
這意味著您的本地計算機不認識遠程主機。這將在您第一次連接到新主機時發(fā)生。輸入 yes
并按 ENTER
繼續(xù)。
接下來,該實用程序?qū)呙枘谋镜貛粢圆檎椅覀冎皠?chuàng)建的 id_rsa.pub
密鑰。當它找到密鑰時,它將提示您輸入遠程用戶帳戶的密碼:
[本地環(huán)境] /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 username@203.0.113.1's password:
輸入密碼(出于安全目的,您的輸入不會顯示)并按 ENTER
。該實用程序?qū)⑹褂媚峁┑拿艽a連接到遠程主機上的帳戶。然后,它將把您的 ~/.ssh/id_rsa.pub
密鑰內(nèi)容復制到遠程帳戶的主目錄 ~/.ssh
中名為 authorized_keys
的文件中。
您將看到以下輸出:
[本地環(huán)境]
Number of key(s) added: 1Now try logging into the machine, with: "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
此時,您的 id_rsa.pub
密鑰已上傳到遠程帳戶。您可以繼續(xù)下一節(jié)。
使用 SSH 復制您的公鑰
如果您沒有 ssh-copy-id
,但是您具有基于密碼的 SSH 訪問權限到服務器上的某個帳戶,您可以使用傳統(tǒng)的 SSH 方法上傳您的密鑰。
我們可以通過在本地計算機上輸出我們的公共 SSH 密鑰的內(nèi)容,并通過 SSH 連接將其傳輸?shù)竭h程服務器。在另一端,我們可以確保我們正在使用的帳戶下存在 ~/.ssh
目錄,然后將我們傳輸?shù)膬?nèi)容輸出到此目錄中名為 authorized_keys
的文件中。
我們將使用 >>
重定向符號來追加內(nèi)容而不是覆蓋它。這將允許我們添加密鑰而不破壞先前添加的密鑰。
完整命令如下:
[本地環(huán)境] cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
您可能會看到類似以下的消息:
[本地環(huán)境]
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
這意味著您的本地計算機不認識遠程主機。這將在您第一次連接到新主機時發(fā)生。輸入 yes
并按 ENTER
繼續(xù)。
之后,您將被提示輸入您嘗試連接的帳戶的密碼:
[本地環(huán)境]
username@203.0.113.1's password:
輸入密碼后,您的 id_rsa.pub
密鑰內(nèi)容將被復制到遠程用戶帳戶的 authorized_keys
文件的末尾。如果成功,繼續(xù)下一節(jié)。
手動復制公鑰
如果您的服務器沒有基于密碼的 SSH 訪問權限,您將不得不手動執(zhí)行上述過程。
您的 id_rsa.pub
文件的內(nèi)容將需要以某種方式添加到遠程機器上的 ~/.ssh/authorized_keys
文件中。
要顯示 id_rsa.pub
密鑰的內(nèi)容,請在本地計算機上輸入以下命令:
[本地環(huán)境] cat ~/.ssh/id_rsa.pub
您將看到密鑰的內(nèi)容,可能類似于以下內(nèi)容:
[本地環(huán)境] ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== username@hostname
使用您可用的任何方法訪問遠程主機。這可能是您的基礎設施提供商提供的基于 Web 的控制臺。
一旦您可以訪問遠程服務器上的帳戶,您應該確保 ~/.ssh
目錄已創(chuàng)建。如果需要,此命令將創(chuàng)建該目錄,如果已存在則不執(zhí)行任何操作:
mkdir -p ~/.ssh
現(xiàn)在,您可以在該目錄中創(chuàng)建或修改 authorized_keys
文件。您可以將 id_rsa.pub
文件的內(nèi)容添加到 authorized_keys
文件的末尾,如果需要的話,可以使用以下命令創(chuàng)建它:
echo public_key_string >> ~/.ssh/authorized_keys
在上述命令中,將 public_key_string
替換為您在本地系統(tǒng)上執(zhí)行 cat ~/.ssh/id_rsa.pub
命令的輸出。它應該以 ssh-rsa AAAA...
或類似的內(nèi)容開頭。
如果這樣操作成功,您可以繼續(xù)測試您的新基于密鑰的 SSH 認證。
步驟 3 — 使用 SSH 密鑰進行身份驗證
如果您已成功完成上述任一過程,您應該能夠 無需 使用遠程帳戶的密碼登錄到遠程主機。
該過程基本上是相同的:
[本地環(huán)境] ssh username@remote_host
如果這是您第一次連接到此主機(如果您使用了上述最后一種方法),您可能會看到類似以下內(nèi)容:
[本地環(huán)境] The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
這意味著您的本地計算機不認識遠程主機。輸入 yes
然后按 ENTER
繼續(xù)。
如果您沒有為私鑰提供密碼,您將立即登錄。如果您在創(chuàng)建密鑰時為私鑰提供了密碼,您現(xiàn)在需要輸入它。之后,將為您在遠程系統(tǒng)上的帳戶創(chuàng)建一個新的 shell 會話。
如果成功,繼續(xù)了解如何鎖定服務器。
步驟 4 — 在服務器上禁用密碼身份驗證
如果你能夠使用 SSH 無需密碼登錄到你的賬戶,那么你已經(jīng)成功地為你的賬戶配置了基于 SSH 密鑰的身份驗證。然而,你的基于密碼的身份驗證機制仍然是激活狀態(tài),這意味著你的服務器仍然容易受到破姐攻擊。
在完成本節(jié)中的步驟之前,請確保你的服務器上要么已經(jīng)為 root 賬戶配置了基于 SSH 密鑰的身份驗證,或者更好的是,你已經(jīng)為服務器上具有 sudo
權限的賬戶配置了基于 SSH 密鑰的身份驗證。這一步將禁用基于密碼的登錄,因此確保你仍然能夠獲得管理員訪問權限是至關重要的。
一旦上述條件為真,請使用 SSH 密鑰登錄到遠程服務器,可以是 root 用戶,也可以是具有 sudo
權限的賬戶。打開 SSH 守護程序的配置文件:
sudo nano /etc/ssh/sshd_config
在文件中,搜索一個名為 PasswordAuthentication
的指令。這可能是被注釋掉的。通過刪除行首的任何 #
號來取消注釋,并將值設置為 no
來啟用該選項,這將禁用使用賬戶密碼通過 SSH 登錄的功能:
PasswordAuthentication no
完成后保存并關閉文件。要實際實施我們剛剛做的更改,你必須重新啟動服務。
在大多數(shù) Linux 發(fā)行版上,你可以使用以下命令來執(zhí)行:
sudo systemctl restart ssh
完成這一步后,你已成功將你的 SSH 守護程序轉(zhuǎn)換為只響應 SSH 密鑰。
結(jié)論
現(xiàn)在你應該已經(jīng)在服務器上配置并運行了基于 SSH 密鑰的身份驗證,允許你在不提供賬戶密碼的情況下登錄。從這里開始,你可以朝著許多方向前進。如果你想了解更多關于使用 SSH 的內(nèi)容,請查看我們的 SSH 基礎指南。
到此這篇關于如何在 Linux 服務器上配置基于 SSH 密鑰的身份驗證的文章就介紹到這了,更多相關Linux SSH身份驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux下實現(xiàn)定時器Timer的幾種方法總結(jié)
下面小編就為大家?guī)硪黄狶inux下實現(xiàn)定時器Timer的幾種方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10解決-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 權限不夠問題
這篇文章主要介紹了解決-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 權限不夠的問題,需要的朋友可以參考下2019-09-09Linux執(zhí)行可執(zhí)行文件提示No such file or directory的解決方法
這篇文章主要介紹了Linux執(zhí)行可執(zhí)行文件提示No such file or directory的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05解決atd服務報錯Failed with result‘exit-code‘問題
在isoftserveros-v5.1-oe1-aarch64系統(tǒng)中,安裝at軟件包后,由于手動執(zhí)行導致atd守護進程出錯,通過查看后臺Process行,手動kill原atd進程,使用systemctl重啟atd服務后,問題得以解決,此經(jīng)驗可為類似情況提供參考2024-09-09Windows系統(tǒng)下Apache服務器無法啟動的問題解決
這篇文章主要介紹了Windows系統(tǒng)下Apache服務器無法啟動的問題解決,大多數(shù)情況下還是端口被占用的問題,需要的朋友可以參考下2015-07-07