ssh(secure shell)是一種加密的網絡協議,廣泛的應用在不安全的網絡上安全地運行網絡服務。
SSH提供了加密的通信和身份驗證的方法,這會讓數據傳輸變得更加安全可靠。
SSH密鑰身份驗證是一種更安全的身份驗證方式,相較於傳統的密碼身份驗證更爲推薦。在安全性方面,SSH密鑰身份驗證提供了更高的保護級別,因爲它基於公鑰和私鑰的加密機制,有效減少了密碼被破解的風險。
密碼身份驗證在很多情況下並不十分安全,因爲密碼可能會被猜測、被破解,甚至在傳輸過程中受到中間人攻擊的威脅。這強調了採用更加複雜和多層次的安全措施的重要性,以確保用戶的身份和數據得到更有效的保護。
而密鑰身份驗證是通過使用公鑰和私鑰的組合,這大大增加了安全性。
用戶的私鑰被保存在本地,而公鑰則存儲在遠程服務器上。這種安排增加了安全性,即使攻擊者截獲了公鑰,也難以反向推導出私鑰。這種方法提供了更可靠的身份驗證方式。
生成SSH密鑰對
首先,需要確保你的Linux系統上已經安裝了OpenSSH工具。
大多數Linux發行版通常會預裝該工具,如果你的系統沒有安裝,可以通過包管理器輕鬆安裝。
在Debian/Ubuntu上使用apt安裝OpenSSH:
sudo apt updatesudo apt install openssh-client openssh-server登錄後複製
在Red Hat/CentOS上使用yum安裝OpenSSH:
sudo yum install openssh-clients openssh-server登錄後複製
使用ssh-keygen生成密鑰對
一旦安裝了OpenSSH,你就可以使用ssh-keygen命令生成SSH密鑰對。
命令的基本用法如下:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"登錄後複製
- -t rsa 指定密鑰類型爲 RSA。
- -b 4096 指定密鑰長度爲 4096 比特,提高安全性。
- -C "your_email@example.com" 添加註釋,一般用你的郵箱地址。
生成密鑰對後,你可以選擇將其存儲在默認位置(~/.ssh/ 目錄下)或選擇其他位置。
生成的密鑰對包括兩個文件:私鑰文件(id_rsa)和公鑰文件(id_rsa.pub)。私鑰文件存儲在本地,而公鑰文件則需要被複制到遠程服務器上。
私鑰是敏感信息,必須妥善保存。公鑰則是用於身份驗證的公開信息。
密鑰的存儲和管理
默認情況下,生成的 SSH 密鑰對會存儲在用戶的 ~/.ssh/ 目錄下。這個目錄包含了兩個主要文件:id_rsa(私鑰)和 id_rsa.pub(公鑰)。這種設置是爲了方便用戶在使用 SSH 時能夠輕鬆找到和管理密鑰。
然而,有時出於安全或組織的考慮,你可能想要將密鑰存儲在其他位置。這可以通過在生成密鑰對時指定存儲路徑來實現。
例如:
ssh-keygen -t rsa -b 4096 -f /path/to/your/keys/my_key -C "your_email@example.com"登錄後複製
這樣會將私鑰存儲爲 /path/to/your/keys/my_key,公鑰存儲爲 /path/to/your/keys/my_key.pub。
SSH 密鑰代理是一個可以管理 SSH 私鑰的程序,可以在一次登錄後將私鑰的解密密碼緩存起來,以便後續的 SSH 操作無需再次輸入密碼。
1、啓動 SSH 代理:
eval "$(ssh-agent -s)"登錄後複製
2、添加私鑰到代理:
ssh-add ~/.ssh/id_rsa登錄後複製
這樣,你就不需要每次 SSH 登錄都輸入私鑰密碼了,提高了使用的便利性和安全性。
在實際使用中,你可能會有多個密鑰對,用於不同的服務器或用途。
爲了更好地管理這些密鑰對,可以使用 SSH 配置文件或密鑰文件的別名。
配置SSH服務器
登錄到目標服務器
在你能夠使用 SSH 密鑰身份驗證登錄到目標服務器之前,確保目標服務器上已經啓用了 SSH 服務。在大多數 Linux 系統中,默認情況下,SSH 服務是啓動的。
ssh username@your_server_ip登錄後複製登錄後複製
確保替換 username 爲你的用戶名,your_server_ip 爲目標服務器的 IP 地址。這將嘗試使用默認的密碼身份驗證登錄。
手動安裝公鑰
手動安裝公鑰是一種基本的方法,它涉及將你的公鑰內容添加到目標服務器上的 ~/.ssh/authorized_keys 文件中。
1、將本地公鑰內容複製到剪貼板:
cat ~/.ssh/id_rsa.pub登錄後複製
2、在目標服務器上,使用文本編輯器打開 ~/.ssh/authorized_keys 文件:
nano ~/.ssh/authorized_keys登錄後複製
3、將剪貼板上的公鑰內容粘貼到文件末尾,並保存文件。
4、回到本地機器,嘗試使用密鑰身份驗證登錄:
ssh username@your_server_ip登錄後複製登錄後複製
通過ssh-copy-id簡化公鑰部署
ssh-copy-id 命令可以簡化將本地公鑰複製到遠程服務器的過程。
這個命令會自動處理將公鑰添加到目標服務器的 ~/.ssh/authorized_keys 文件中。
ssh-copy-id username@your_server_ip登錄後複製
確保替換 username 爲你的用戶名,your_server_ip 爲目標服務器的 IP 地址。這個命令將提示你輸入用戶密碼,然後將本地公鑰複製到目標服務器上。
通過這兩種方法,你可以在目標服務器上配置 SSH 密鑰身份驗證,提高登錄的安全性和便利性。
SSH 配置文件詳解
~/.ssh/config 文件的作用和結構
~/.ssh/config 文件是一個用於配置 SSH 客戶端行爲的配置文件。
它允許你爲不同的主機設置自定義的配置選項,從而簡化 SSH 連接的管理。
創建 ~/.ssh/config 文件:
touch ~/.ssh/config登錄後複製
編輯 ~/.ssh/config 文件:
nano ~/.ssh/config登錄後複製
使用別名、端口號等配置項簡化SSH連接
配置文件中可以包含多個主機條目,每個條目定義了連接到遠程主機的配置選項。
以下是一個簡單的例子:
Host exampleHostName your_server_ipUser usernamePort 2222IdentityFile ~/.ssh/id_rsa登錄後複製
- Host:設置別名,用於代替實際的主機名。
- HostName:遠程主機的 IP 地址或域名。
- User:連接時使用的用戶名。
- Port:SSH 連接的端口號。
- IdentityFile:指定用於身份驗證的私鑰文件路徑。
實際場景中的示例配置文件
以下是一個更爲複雜的 ~/.ssh/config 文件,涵蓋了多個主機和配置選項:
Host workHostName work.example.comUser alicePort 22IdentityFile ~/.ssh/work_keyHost personalHostName personal.example.orgUser bobPort 2222IdentityFile ~/.ssh/personal_keyHost githubHostName github.comUser gitIdentityFile ~/.ssh/github_key登錄後複製
這樣,你只需要使用別名就能夠輕鬆連接到相應的主機,而不必記住每個主機的詳細信息。
限制和加固SSH訪問
禁用密碼身份驗證
禁用密碼身份驗證是提高 SSH 安全性的重要步驟之一。
這樣,用戶只能通過密鑰身份驗證進行訪問,而不再依賴弱密碼。
在sshd_config中禁用密碼身份驗證:
1、打開 sshd_config 文件:
sudo nano /etc/ssh/sshd_config登錄後複製
2、找到並修改以下行:
PasswordAuthentication no登錄後複製
3、保存文件並重新啓動 SSH 服務:
sudo service ssh restart登錄後複製
使用sshd_config文件設置訪問限制
sshd_config 文件包含了用於配置 SSH 服務器的各種選項。
通過適當配置,你可以限制用戶訪問、定義允許登錄的用戶、設置登錄時的認證方式等。
一些常用的 sshd_config 選項:
- AllowUsers:指定允許登錄的用戶列表。
- DenyUsers:指定禁止登錄的用戶列表。
- AllowGroups:指定允許登錄的用戶組列表。
- DenyGroups:指定禁止登錄的用戶組列表。
- PermitRootLogin:禁用或限制 root 用戶的遠程登錄。
示例:
AllowUsers alice bobDenyUsers malloryAllowGroups sshusersDenyGroups badusersPermitRootLogin no登錄後複製
以上就是如何在Linux系統中設置SSH密鑰身份驗證的詳細內容,更多請關注本站其它相關文章!