Linux 安全连接

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

安全外壳协议(Secure Shell,SSH)是一种加密网络协议,用于在不安全的网络上安全地访问远程服务器。作为 IT 领域的专业人士,了解如何与 Linux 服务器建立安全连接是一项必备技能。

在这个实验中,你将学习如何生成 SSH 密钥对、管理你的密钥,以及设置 SSH 进行安全认证。对于需要安全访问和管理远程系统的系统管理员、开发人员和网络安全专业人员来说,这些知识是基础。

通过完成这个实验,你将获得 SSH 的实践经验,SSH 是 Linux 服务器安全远程管理和安全文件传输的行业标准方法。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/ls -.-> lab-271389{{"Linux 安全连接"}} linux/cat -.-> lab-271389{{"Linux 安全连接"}} linux/chmod -.-> lab-271389{{"Linux 安全连接"}} linux/cd -.-> lab-271389{{"Linux 安全连接"}} linux/mkdir -.-> lab-271389{{"Linux 安全连接"}} linux/ssh -.-> lab-271389{{"Linux 安全连接"}} linux/nano -.-> lab-271389{{"Linux 安全连接"}} end

理解 SSH 基础

SSH(安全外壳协议,Secure Shell)是一种提供安全访问远程计算机的协议。与 Telnet 等较旧的协议不同,SSH 会对客户端和服务器之间的所有通信进行加密,保护你的数据不被窃听。

SSH 具有以下几个优点:

  • 加密通信
  • 强大的认证方法
  • 数据完整性验证
  • 安全的文件传输

首先,我们来检查你的系统是否安装了 SSH。打开终端并运行以下命令:

ssh -V

你应该会看到类似下面的输出,显示已安装的 SSH 版本:

OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

现在,让我们切换到项目目录,后续操作将在此目录中进行:

cd ~/project

此命令会将当前目录更改为 /home/labex/project,在这个实验中,我们将在此目录中执行所有操作。

生成 SSH 密钥对

SSH 支持多种认证方法,但基于密钥的认证是最安全、最便捷的。在这一步,你将生成一对 SSH 密钥。

SSH 密钥对由以下两部分组成:

  • 私钥:这就像你的秘密密码,绝不能共享。
  • 公钥:你可以将其安全地分享给你想要连接的远程服务器。

要生成新的 SSH 密钥对,请使用 ssh-keygen 命令:

ssh-keygen -t rsa -b 4096

此命令指定了:

  • -t rsa:使用 RSA 算法生成密钥
  • -b 4096:创建一个 4096 位的密钥,提供强大的安全性

当你运行此命令时,系统会提示你:

  1. 输入保存密钥的文件路径(按回车键接受默认路径 ~/.ssh/id_rsa
  2. 输入密码短语(在本实验中,你可以按两次回车键留空)

以下是你可能看到的示例输出:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|       . .       |
|      . + .      |
|     . = + .     |
|    . = S = .    |
|   . . = = + .   |
|    . . + = + .  |
|     . . + + .   |
|      .. . .     |
+----[SHA256]-----+

现在,让我们查看生成的密钥。要查看你的公钥,请使用以下命令:

cat ~/.ssh/id_rsa.pub

这将显示你的公钥,看起来像这样:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

请记住,公钥可以共享,但私钥(~/.ssh/id_rsa)必须妥善保管,绝不能与任何人共享。

理解 SSH 密钥权限

出于安全考虑,SSH 对文件权限有严格要求。在这一步,你将了解 SSH 密钥的正确权限设置方法。

让我们检查一下你 SSH 密钥的当前权限:

ls -la ~/.ssh/

你应该会看到类似以下的输出:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

正确的权限设置如下:

  • 私钥 (id_rsa):600(仅你可读写)
  • 公钥 (id_rsa.pub):644(所有人可读,仅你可写)
  • .ssh 目录:700(仅你可访问)

如果你的权限设置不同,可以使用以下命令进行正确设置:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

让我们验证一下权限是否已正确设置:

ls -la ~/.ssh/

输出现在应该显示正确的权限:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

这些权限设置对于安全至关重要——如果权限设置过于开放,SSH 将拒绝工作,因为这可能会导致你的私钥泄露。

设置 SSH 认证

在这一步,你将学习如何设置基于 SSH 密钥的认证。这样你就可以无需每次登录远程服务器时都输入密码。

要使 SSH 密钥认证生效,你需要将公钥复制到服务器的 ~/.ssh/authorized_keys 文件中。在实际场景中,你可以使用 ssh-copy-id 命令来完成此操作:

## Example for reference (Do not run this)
## ssh-copy-id username@remote_host

由于本实验没有真实的远程服务器,我们将通过创建本地的 authorized_keys 文件来模拟这个过程。

首先,如果 .ssh 目录不存在,我们先创建它:

mkdir -p ~/.ssh

mkdir -p 命令会在目录不存在时创建它,若目录已存在则不做任何操作。

现在,让我们创建或追加内容到 authorized_keys 文件:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

此命令将你的公钥追加到 authorized_keys 文件中。在实际环境中,这个文件位于远程服务器上。

让我们验证 authorized_keys 文件的内容:

cat ~/.ssh/authorized_keys

你应该会在输出中看到你的公钥,输出内容应该类似于:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

最后,确保 authorized_keys 文件具有正确的权限:

chmod 600 ~/.ssh/authorized_keys

这将权限设置为仅所有者可读写,这是 authorized_keys 文件的安全要求。

理解 SSH 配置文件

SSH 允许你通过 SSH 配置文件自定义其行为。当你需要定期连接多个服务器时,这尤其有用。

让我们创建一个 SSH 配置文件,看看它是如何工作的:

nano ~/.ssh/config

这将打开 nano 文本编辑器。在文件中添加以下内容:

## Default settings for all hosts
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

## Example server configuration
Host example
    HostName example.com
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa

在这个配置中:

  • ServerAliveInterval 60 每 60 秒发送一次保活信号
  • ServerAliveCountMax 3 若服务器连续 3 次信号都无响应,则断开连接
  • Host example 部分创建了一个别名,这样你可以使用 ssh example 来连接,而不是 ssh [email protected] -p 22

要在 nano 中保存文件,请按 Ctrl+O,然后按 Enter 确认,再按 Ctrl+X 退出。

现在,让我们为配置文件设置正确的权限:

chmod 600 ~/.ssh/config

这确保只有你可以读取和写入此文件,这对安全很重要。

在实际场景中,你现在只需输入以下命令就可以连接到服务器:

## Example for reference (Do not run this)
## ssh example

而不是:

## Example for reference (Do not run this)
## ssh [email protected] -p 22

SSH 配置文件是一个强大的工具,可以节省你的时间,并使管理多个 SSH 连接变得更加容易。

总结

在本实验中,你学习了用于安全连接 Linux 服务器的 SSH(安全外壳协议)基础知识。以下是你所完成内容的回顾:

  1. 你了解了 SSH 及其在安全远程连接中的重要性
  2. 你生成了由私钥和公钥组成的 SSH 密钥对
  3. 你了解了正确的文件权限对 SSH 安全的重要性
  4. 你通过配置 authorized_keys 文件设置了基于 SSH 密钥的认证
  5. 你创建了 SSH 配置文件来定制和简化 SSH 连接

这些技能对于任何使用 Linux 系统的人来说都是必不可少的,尤其适用于云计算、系统管理、DevOps 和网络安全等领域的工作者。SSH 是安全访问远程 Linux 服务器的标准方法,全球的 IT 专业人员每天都在使用它。

通过本实验获得的知识,你现在已经具备了建立与 Linux 服务器安全连接的能力,这是进一步学习 Linux 系统管理和云计算的一项基本技能。