如何在 Ubuntu 上安装和设置 SSH

在 Ubuntu 上安装和设置 SSH:全面指南

安全 Shell (SSH) 是一种网络协议,允许您通过加密通道安全地连接到远程计算机。它广泛用于服务器管理、远程访问和安全文件传输。本文将详细指导您如何在 Ubuntu 系统上安装和配置 SSH,包括服务器端和客户端设置,以及一些高级安全实践。

1. SSH 的工作原理

在深入安装和配置之前,了解 SSH 的基本工作原理非常重要。SSH 使用客户端-服务器模型:

  • SSH 服务器: 运行在您希望远程访问的计算机上。它监听传入的连接请求,验证客户端的身份,并建立安全连接。
  • SSH 客户端: 用于发起连接到 SSH 服务器的程序。它负责加密和解密数据,并向用户提供与远程系统的交互界面。

SSH 使用非对称加密(公钥加密)来建立安全连接:

  1. 密钥对生成: 服务器和客户端都可以生成一对密钥:公钥和私钥。公钥可以公开分发,而私钥必须严格保密。
  2. 连接请求: 客户端使用服务器的公钥加密连接请求。
  3. 身份验证: 服务器使用其私钥解密请求。如果解密成功,则证明客户端拥有正确的公钥。
  4. 会话密钥交换: 一旦客户端通过身份验证,服务器和客户端会协商一个对称会话密钥,用于后续通信的加密和解密。

这种机制确保了通信的机密性、完整性和身份验证。

2. 在 Ubuntu 上安装 SSH 服务器

默认情况下,大多数 Ubuntu 服务器安装可能不包含 SSH 服务器。以下是在 Ubuntu 上安装 OpenSSH 服务器(最常用的 SSH 实现)的步骤:

2.1. 更新软件包列表

在安装任何新软件之前,最好更新系统的软件包列表。打开终端并运行以下命令:

bash
sudo apt update

此命令会从 Ubuntu 软件仓库获取最新的软件包信息。

2.2. 安装 OpenSSH 服务器

使用以下命令安装 OpenSSH 服务器软件包:

bash
sudo apt install openssh-server

系统将提示您输入管理员密码。输入密码并按 Enter 键继续。apt 将下载并安装 OpenSSH 服务器及其依赖项。

2.3. 验证 SSH 服务状态

安装完成后,SSH 服务通常会自动启动。您可以使用以下命令检查其状态:

bash
sudo systemctl status ssh

输出应类似于以下内容:

● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since ...
...

如果服务未运行,您可以使用以下命令手动启动它:

bash
sudo systemctl start ssh

要使 SSH 服务在系统启动时自动启动,请运行:

bash
sudo systemctl enable ssh

2.4. 配置防火墙 (如果已启用)

如果您的 Ubuntu 系统启用了防火墙(例如 ufw),则需要允许 SSH 流量通过。默认情况下,SSH 使用端口 22。使用以下命令允许通过端口 22 的连接:

bash
sudo ufw allow ssh

或者更具体地:
bash
sudo ufw allow 22/tcp

您可以使用以下命令检查防火墙状态:

bash
sudo ufw status

确保规则已正确添加。

3. 在 Ubuntu 上安装 SSH 客户端

大多数 Ubuntu 桌面安装默认包含 SSH 客户端。如果没有,或者您需要安装特定的客户端,请按照以下步骤操作:

3.1. 安装 OpenSSH 客户端

如果您需要基本的 SSH 客户端功能,可以使用以下命令安装 OpenSSH 客户端软件包:

bash
sudo apt install openssh-client

3.2. 其他 SSH 客户端

除了 OpenSSH 客户端,还有其他流行的 SSH 客户端可供选择,例如:

  • PuTTY: 一个流行的 Windows SSH 客户端,也可以在 Linux 上使用。它提供图形用户界面和许多高级功能。
    sudo apt install putty
  • MobaXterm: 另一个功能强大的 Windows SSH 客户端,具有 X11 服务器、选项卡式终端和许多其他工具。在Linux上不直接支持,可以通过Wine来尝试运行。
  • Termius: 跨平台 SSH 客户端,提供现代化的界面和同步功能。需要注册账号,有免费版和付费版。

根据您的需求选择合适的客户端。

4. 连接到 SSH 服务器

安装 SSH 服务器和客户端后,您可以尝试建立连接。

4.1. 使用 OpenSSH 客户端连接

使用以下命令连接到 SSH 服务器:

bash
ssh username@server_ip_address

  • username:您在远程服务器上的用户名。
  • server_ip_address:远程服务器的 IP 地址或域名。

例如:

bash
ssh [email protected]

首次连接到新服务器时,系统将提示您验证服务器的指纹。这是为了防止中间人攻击。仔细检查指纹是否与服务器管理员提供的信息匹配。如果匹配,键入 yes 并按 Enter 键。

然后,系统将提示您输入远程用户的密码。输入密码并按 Enter 键。如果密码正确,您将成功登录到远程服务器的 shell。

4.2. 使用其他 SSH 客户端连接

其他 SSH 客户端(如 PuTTY)通常提供图形用户界面。您需要在界面中输入服务器的 IP 地址、端口号(默认为 22)和用户名,然后单击“连接”按钮。系统将提示您输入密码。

5. SSH 密钥身份验证

密码身份验证虽然简单,但存在安全风险,例如暴力破解攻击。SSH 密钥身份验证是一种更安全、更方便的替代方案。

5.1. 生成 SSH 密钥对

在客户端计算机上,使用以下命令生成 SSH 密钥对:

bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"

  • -t rsa:指定密钥类型为 RSA。
  • -b 4096:指定密钥长度为 4096 位(更安全)。
  • -C "[email protected]":添加注释(可选,通常使用您的电子邮件地址)。

系统将提示您选择密钥文件的保存位置(默认为 ~/.ssh/id_rsa)和设置密码(可选,但强烈建议)。如果您设置了密码,则每次使用私钥时都需要输入密码。

此命令将生成两个文件:

  • ~/.ssh/id_rsa:您的私钥(必须妥善保管)。
  • ~/.ssh/id_rsa.pub:您的公钥(可以安全地复制到服务器)。

5.2. 将公钥复制到服务器

有几种方法可以将公钥复制到服务器:

  • 使用 ssh-copy-id 命令(推荐):

    bash
    ssh-copy-id username@server_ip_address

    此命令会自动将您的公钥添加到服务器上的 ~/.ssh/authorized_keys 文件中。系统将提示您输入远程用户的密码。

  • 手动复制:

    1. 在客户端上显示您的公钥:

      bash
      cat ~/.ssh/id_rsa.pub

    2. 复制公钥内容。

    3. 通过 SSH 连接到服务器。
    4. 在服务器上,打开或创建 ~/.ssh/authorized_keys 文件:

      bash
      mkdir -p ~/.ssh
      nano ~/.ssh/authorized_keys

    5. 将您复制的公钥粘贴到 authorized_keys 文件中(每行一个密钥)。

    6. 保存并关闭文件。
    7. 设置正确的权限:
      bash
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys

5.3. 使用密钥登录

完成上述步骤后,您可以使用 SSH 密钥登录到服务器,而无需输入密码(除非您为私钥设置了密码):

bash
ssh username@server_ip_address

如果一切配置正确,您将直接登录到服务器。

6. SSH 配置

SSH 服务器和客户端的行为可以通过配置文件进行自定义。

6.1. SSH 服务器配置文件 (/etc/ssh/sshd_config)

这是 SSH 服务器的主要配置文件。您可以使用文本编辑器(如 nanovim)打开它:

bash
sudo nano /etc/ssh/sshd_config

以下是一些常见的配置选项:

  • Port 22 指定 SSH 服务器监听的端口号。您可以更改此端口以提高安全性(例如,Port 2222)。
  • PermitRootLogin no 禁止 root 用户通过 SSH 登录。强烈建议启用此选项以提高安全性。您应该使用普通用户登录,然后使用 sudo 提升权限。
  • PasswordAuthentication yes/no 启用或禁用密码身份验证。如果您配置了密钥身份验证,可以禁用密码身份验证以提高安全性。
  • PubkeyAuthentication yes 启用公钥身份验证(默认启用)。
  • AllowUsers user1 user2 仅允许指定的用户名通过 SSH 登录。
  • AllowGroups group1 group2 仅允许指定用户组的成员通过SSH登录。
  • X11Forwarding yes/no 启用或禁用 X11 转发(允许您在远程服务器上运行图形应用程序)。
  • ClientAliveInterval 300ClientAliveCountMax 3: 这些选项用于检测客户端是否仍然连接。ClientAliveInterval 设置服务器发送“保持活动”消息的时间间隔(以秒为单位),ClientAliveCountMax 设置在服务器认为客户端已断开连接之前发送的未响应消息的数量。

更改配置后,您需要重启 SSH 服务以使更改生效:

bash
sudo systemctl restart ssh

6.2. SSH 客户端配置文件 (~/.ssh/config)

您可以为每个用户创建 SSH 客户端配置文件,以自定义特定主机的连接设置。创建或编辑 ~/.ssh/config 文件:

bash
nano ~/.ssh/config

以下是一些常见的配置选项:

Host my_server
HostName server_ip_address
User username
Port 2222
IdentityFile ~/.ssh/my_server_key

  • Host my_server 定义一个别名,您可以使用它来代替 ssh username@server_ip_address
  • HostName server_ip_address 指定服务器的 IP 地址或域名。
  • User username 指定要使用的用户名。
  • Port 2222 指定要连接的端口号。
  • IdentityFile ~/.ssh/my_server_key 指定要使用的私钥文件。

您可以在 ~/.ssh/config 文件中为不同的主机定义不同的配置。

7. SSH 安全最佳实践

以下是一些提高 SSH 安全性的最佳实践:

  • 禁用 root 登录: 如前所述,禁止 root 用户通过 SSH 登录是提高安全性的关键步骤。
  • 使用密钥身份验证: 密钥身份验证比密码身份验证更安全。
  • 更改默认端口: 将 SSH 服务器的默认端口更改为非标准端口可以减少自动扫描和暴力破解攻击的风险。
  • 使用防火墙: 配置防火墙以仅允许来自可信 IP 地址的 SSH 连接。
  • 限制用户访问: 使用 AllowUsersAllowGroups 选项限制允许通过 SSH 登录的用户或组。
  • 使用强密码: 如果您必须使用密码身份验证,请使用强密码(至少 12 个字符,包含大小写字母、数字和符号)。
  • 定期更新 SSH 软件: 及时应用安全更新以修复已知的漏洞。
  • 监控 SSH 日志: 定期检查 SSH 日志文件(通常位于 /var/log/auth.log)以检测可疑活动。
  • 使用 Fail2ban: Fail2ban 是一个入侵防御框架,它可以监控日志文件(例如 /var/log/auth.log)并自动阻止多次失败登录尝试的 IP 地址。
    bash
    sudo apt install fail2ban

    然后配置 /etc/fail2ban/jail.local 文件以启用 SSH 保护.
  • 双因素认证 (2FA): 考虑使用双因素认证(例如,Google Authenticator)为 SSH 登录添加额外的安全层。

8. 总结

本文详细介绍了在 Ubuntu 上安装和配置 SSH 的各个方面,包括服务器端和客户端设置、密钥身份验证、配置选项和安全最佳实践。通过遵循这些步骤和建议,您可以建立一个安全可靠的 SSH 环境,用于远程访问和管理您的 Ubuntu 系统。记住,安全性是一个持续的过程,您应该定期审查和更新您的 SSH 配置以应对新的威胁。

THE END