介绍
安全外壳协议(Secure Shell,SSH)是一种加密网络协议,用于在不安全的网络上安全地访问远程服务器。作为 IT 领域的专业人士,了解如何与 Linux 服务器建立安全连接是一项必备技能。
在这个实验中,你将学习如何生成 SSH 密钥对、管理你的密钥,以及设置 SSH 进行安全认证。对于需要安全访问和管理远程系统的系统管理员、开发人员和网络安全专业人员来说,这些知识是基础。
通过完成这个实验,你将获得 SSH 的实践经验,SSH 是 Linux 服务器安全远程管理和安全文件传输的行业标准方法。
了解 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 位的密钥,提供强大的安全性
当你运行此命令时,系统会提示你:
- 输入保存密钥的文件路径(按回车键接受默认路径
~/.ssh/id_rsa) - 输入密码短语(在本实验中,你可以按两次回车键留空)
以下是你可能看到的示例输出:
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 username@example.com -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 username@example.com -p 22
SSH 配置文件是一个强大的工具,可以节省你的时间,并使管理多个 SSH 连接变得更加容易。
总结
在本实验中,你学习了用于安全连接 Linux 服务器的 SSH(安全外壳协议)基础知识。以下是你所完成内容的回顾:
- 你了解了 SSH 及其在安全远程连接中的重要性
- 你生成了由私钥和公钥组成的 SSH 密钥对
- 你了解了正确的文件权限对 SSH 安全的重要性
- 你通过配置
authorized_keys文件设置了基于 SSH 密钥的认证 - 你创建了 SSH 配置文件来定制和简化 SSH 连接
这些技能对于任何使用 Linux 系统的人来说都是必不可少的,尤其适用于云计算、系统管理、DevOps 和网络安全等领域的工作者。SSH 是安全访问远程 Linux 服务器的标准方法,全球的 IT 专业人员每天都在使用它。
通过本实验获得的知识,你现在已经具备了建立与 Linux 服务器安全连接的能力,这是进一步学习 Linux 系统管理和云计算的一项基本技能。



