首頁  >  文章  >  電腦教學  >  如何在Linux系統中設定SSH金鑰身份驗證

如何在Linux系統中設定SSH金鑰身份驗證

王林
王林轉載
2024-03-08 09:49:02614瀏覽

SSH(Secure Shell)是一種加密的網路協議,廣泛的應用在不安全的網路上安全地運行網路服務。

SSH提供了加密的通訊和身份驗證的方法,這會讓資料傳輸變得更加安全可靠。

SSH金鑰驗證是一種更安全的身份驗證方式,相較於傳統的密碼驗證更為推薦。在安全性方面,SSH金鑰身份驗證提供了更高的保護級別,因為它基於公鑰和私鑰的加密機制,有效減少了密碼被破解的風險。

密碼驗證在許多情況下並不十分安全,因為密碼可能會被猜測、被破解,甚至在傳輸過程中受到中間人攻擊的威脅。這強調了採用更複雜和多層次的安全措施的重要性,以確保使用者的身分和資料得到更有效的保護。

而金鑰身份驗證是透過使用公鑰和私鑰的組合,這大大增加了安全性。

使用者的私鑰被保存在本地,而公鑰則儲存在遠端伺服器上。這種安排增加了安全性,即使攻擊者截獲了公鑰,也難以反向推導出私鑰。這種方法提供了更可靠的身份驗證方式。

如何在Linux系統中設定SSH金鑰身份驗證

#產生SSH金鑰對

#首先,要確保你的Linux系統上已經安裝了OpenSSH工具。

大多數Linux發行版通常會預先安裝該工具,如果你的系統沒有安裝,可以透過套件管理器輕鬆安裝。

在Debian/Ubuntu上使用apt安裝OpenSSH:

sudo apt update
sudo 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 example
HostName your_server_ip
User username
Port 2222
IdentityFile ~/.ssh/id_rsa
  • Host:设置别名,用于代替实际的主机名。
  • HostName:远程主机的 IP 地址或域名。
  • User:连接时使用的用户名。
  • Port:SSH 连接的端口号。
  • IdentityFile:指定用于身份验证的私钥文件路径。

实际场景中的示例配置文件

以下是一个更为复杂的 ~/.ssh/config 文件,涵盖了多个主机和配置选项:

Host work
HostName work.example.com
User alice
Port 22
IdentityFile ~/.ssh/work_key

Host personal
HostName personal.example.org
User bob
Port 2222
IdentityFile ~/.ssh/personal_key

Host github
HostName github.com
User git
IdentityFile ~/.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 bob
DenyUsers mallory
AllowGroups sshusers
DenyGroups badusers
PermitRootLogin no

以上是如何在Linux系統中設定SSH金鑰身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:mryunwei.com。如有侵權,請聯絡admin@php.cn刪除