介紹
SSH,或稱安全殼層協議,是一種用於管理和與伺服器通信的加密協議。當你在使用Rocky Linux伺服器時,大部分時間可能都會在通過SSH連接到你的伺服器的終端會話中度過。
在這個指南中,我們將專注於為Rocky Linux 9伺服器設置SSH密鑰。SSH密鑰提供了一種簡單、安全的登錄伺服器方法,並推薦給所有用戶。
步驟1 — 創建RSA密鑰對
第一步是在客戶端機器上(通常是你的本地電腦)創建密鑰對:
- ssh-keygen
默認情況下,ssh-keygen
會創建一個2048位的RSA密鑰對,對於大多數使用案例來說已經足夠安全了(你也可以選擇使用-b 4096
標誌來創建一個更大的4096位密鑰)。
輸入命令後,你應該會看到以下提示:
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
按ENTER
鍵將密鑰對保存到你家目錄下的.ssh/
子目錄中,或者指定一個替代路徑。
如果你之前已經生成過SSH密鑰對,你可能會看到以下提示:
Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
如果您选择覆盖磁盘上的密钥,则将不能再使用先前的密钥进行身份验证。在选择“是”时要非常小心,因为这是一个不可逆的过程。
然后,您应该看到以下提示:
OutputEnter passphrase (empty for no passphrase):
在这里,您可以选择输入一个安全口令,这是非常建议的。口令可以为您的密钥添加额外的安全层,以防止未经授权的用户登录。
然后,您应该看到以下输出:
OutputYour identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
现在您拥有可以用于身份验证的公钥和私钥。下一步是将公钥传输到服务器,以便您可以使用基于SSH密钥的身份验证进行登录。
第2步 — 将公钥复制到您的Rocky Linux服务器
将公钥复制到Rocky Linux主机的最快方式是使用一个称为ssh-copy-id
的实用程序。如果可能,强烈建议使用此方法。如果在客户机上没有ssh-copy-id
可用,可以使用以下两种备用方法之一(通过基于密码的SSH复制,或手动复制密钥)。
使用ssh-copy-id
複製您的公鑰
ssh-copy-id
工具通常已包含在許多操作系統中,因此您可能已在本地系統上使用它。為使此方法有效,您必須已經具有基於密碼的SSH訪問權限到您的伺服器。
要使用此實用工具,您只需指定您想連接的遠程主機和您具有密碼SSH訪問權限的使用者帳戶。這是將複製您的公共SSH金鑰的帳戶:
- ssh-copy-id username@remote_host
您可能會看到以下消息:
OutputThe 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
繼續。
接下來,該實用工具將掃描您的本地帳戶以尋找我們之前創建的id_rsa.pub
金鑰。當找到金鑰時,它將提示您輸入遠程使用者帳戶的密碼:
Output/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
。該實用工具將使用您提供的密碼連接到遠程主機上的帳戶。然後,它將將您的~/.ssh/id_rsa.pub
金鑰的內容複製到遠程帳戶的~/.ssh/authorized_keys
文件中。
您應該看到以下輸出:
OutputNumber of key(s) added: 1
Now 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
密鑰已經上傳到遠程帳戶。 您可以繼續進入步驟3。
使用SSH複製公鑰
如果您沒有ssh-copy-id
可用,但您具有基於密碼的SSH訪問權限到您服務器上的帳戶,您可以使用更常規的SSH方法上傳您的密鑰。
我們可以通過使用cat
命令讀取本地計算機上的公共SSH密鑰的內容,並將其通過SSH連接管道到遠程服務器來完成此操作。
在另一邊,我們可以確保〜/ .ssh
目錄存在並且在我們使用的帳戶下具有正確的權限。
然後,我們可以將我們傳輸的內容輸出到此目錄中的名為authorized_keys
的文件中。 我們將使用>>
重定向符號來追加內容,而不是覆蓋它。 這將允許我們添加密鑰,而不會破壞先前添加的任何密鑰。
完整的命令如下:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
您可能會看到以下消息:
OutputThe 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
繼續。
隨後,您應提示輸入遠程用戶帳戶密碼:
Outputusername@203.0.113.1's password:
輸入密碼後,將您的id_rsa.pub
金鑰內容複製到遠程用戶帳戶的authorized_keys
文件的末尾。如果成功,請繼續進入第3步。
手動複製公鑰
如果您無法使用基於密碼的SSH訪問您的服務器,則必須手動完成上述流程。
我們將手動將您的id_rsa.pub
文件的內容附加到遠程機器上的~/.ssh/authorized_keys
文件中。
為了顯示id_rsa.pub
金鑰的內容,請在本地計算機上輸入以下命令:
- cat ~/.ssh/id_rsa.pub
您將看到金鑰的內容,應該類似於:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host
使用可用的任何方法登錄到遠程主機。
一旦您可以訪問遠程服務器上的帳戶,請確保~/.ssh
目錄存在。此命令將在必要時創建目錄,如果已存在,則不會執行任何操作:
- mkdir -p ~/.ssh
現在,您可以在此目錄中創建或修改authorized_keys
文件。您可以將id_rsa.pub
文件的內容添加到authorized_keys
文件的末尾,如有必要,可以使用以下命令創建:
- echo public_key_string >> ~/.ssh/authorized_keys
在上述命令中,將public_key_string
替換為您在本地系統上執行的cat ~/.ssh/id_rsa.pub
命令的輸出。它應該以ssh-rsa AAAA...
開頭。
最後,我們將確保~/.ssh
目錄和authorized_keys
文件具有適當的權限設置:
- chmod -R go= ~/.ssh
這將遞歸地刪除~/.ssh/
目錄的所有“group”和“other”權限。
如果您正在使用root
帳戶為用戶帳戶設置密鑰,則~/.ssh
目錄歸屬於用戶而不是root
也很重要:
- chown -R sammy:sammy ~/.ssh
在本教程中,我們的用戶名為sammy,但您應該將適當的用戶名替換到上述命令中。
現在,我們可以嘗試使用密鑰進行身份驗證來登錄到我們的Rocky Linux服務器。
步驟3 — 使用SSH密鑰登錄到您的Rocky Linux服務器
如果您已成功完成上述程序之一,現在應該能夠使用遠程帳戶的密碼without進行登錄。
初始過程與基於密碼的身份驗證相同:
- ssh username@remote_host
如果這是您首次連接到此主機(如果您使用了上述的方法),您可能會看到類似以下的內容:
OutputThe 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
繼續。
如果在步驟1中創建密鑰對時未提供密碼,您將立即登錄。如果提供了密碼,您現在將被提示輸入它。驗證後,應該為您在Rocky Linux服務器上配置的帳戶打開一個新的shell會話。
如果基於密鑰的身份驗證成功,繼續了解如何通過禁用SSH服務器的基於密碼的身份驗證來進一步保護系統。
第4步 — 在您的服務器上禁用密碼身份驗證
如果您能夠使用SSH無密碼登錄您的帳戶,則已成功配置了基於SSH密鑰的身份驗證。但是,基於密碼的身份驗證機制仍然處於活動狀態,這意味著您的服務器仍然容易受到暴力攻擊。
在完成本節步驟之前,請確保您的伺服器上已配置了基於SSH金鑰的身份驗證,針對root帳戶或更好地,是針對此伺服器上帶有sudo
特權的非root帳戶。這一步將鎖定基於密碼的登錄,因此確保您仍然能夠獲得管理訪問權限至關重要。
確認您的遠程帳戶具有管理特權後,使用SSH金鑰登錄到您的遠程伺服器,可以是以root身份或帶有sudo
特權的帳戶。然後,打開SSH守備程序的配置文件:
- sudo vi /etc/ssh/sshd_config
在文件內,尋找一個名為PasswordAuthentication
的指令。這可能被以#
哈希符號註釋掉。按i
進入插入模式,然後取消註釋該行並將值設置為no
。這將禁用您通過SSH使用帳戶密碼登錄的能力:
...
PasswordAuthentication no
...
完成更改後,按ESC
,然後輸入:wq
以將更改寫入文件並退出。為實際實施這些更改,我們需要重新啟動sshd
服務:
- sudo systemctl restart sshd
作為預防措施,打開一個新的終端窗口,測試SSH服務是否正常運作,然後再關閉當前會話:
- ssh username@remote_host
確認SSH服務仍然正常運行後,您可以安全地關閉所有當前的伺服器會話。
您的Rocky Linux伺服器上的SSH守護程序現在僅響應SSH金鑰。成功禁用了基於密碼的身份驗證。
結論
您現在應該已經在您的伺服器上配置了基於SSH金鑰的身份驗證,這使您可以在不提供帳戶密碼的情況下登錄。
如果您想了解更多關於使用SSH的資訊,請查看我們的SSH基礎指南。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9