How to Install SSH Server on Ubuntu – wiki基地


在Ubuntu系统上安装和配置SSH服务器的详细指南

SSH(Secure Shell,安全外壳协议)是一种加密的网络协议,用于在不安全的网络上安全地执行网络服务。最常见的用途是远程登录到服务器,安全地执行命令,以及进行文件传输。对于管理远程Ubuntu服务器、进行开发部署或仅仅是访问家庭电脑,SSH都是不可或缺的工具。

Ubuntu系统默认通常不安装SSH服务器,但安装过程非常简单。本文将详细指导您如何在Ubuntu系统上安装、配置和保护SSH服务器(OpenSSH)。

1. 理解SSH及其重要性

在深入安装步骤之前,了解SSH的工作原理和重要性是非常有益的。

  • 加密通信: SSH通过加密客户端和服务器之间的所有通信,确保数据传输的安全性,防止数据被窃听或篡改。
  • 远程管理: 您可以通过SSH从任何地方安全地连接到您的Ubuntu机器,执行命令行操作,就像坐在机器前一样。
  • 文件传输: SCP(Secure Copy Protocol)和SFTP(SSH File Transfer Protocol)是基于SSH的文件传输协议,提供了安全可靠的文件传输方式。
  • 端口转发: SSH允许通过加密隧道转发其他网络协议的连接,实现安全的内部网络访问。

安装SSH服务器(通常是OpenSSH)是远程管理任何Ubuntu系统的基础。

2. 安装前的准备工作

在开始安装之前,请确保您具备以下条件:

  • 一台安装了Ubuntu操作系统的计算机(可以是桌面版或服务器版)。
  • 对Ubuntu命令行终端有基本的了解。
  • 计算机已连接到互联网,以便下载安装包。
  • 拥有一个具有sudo权限的用户账户。

3. 安装OpenSSH服务器

Ubuntu软件库中包含了OpenSSH软件包。安装过程非常直接,通过几个简单的命令即可完成。

步骤 1:更新软件包列表

在安装任何新的软件包之前,强烈建议更新系统的软件包列表。这确保您下载的是最新版本的软件信息。

打开终端,输入以下命令:

bash
sudo apt update

按下回车键,系统可能会提示您输入用户密码。输入密码时,终端不会显示任何字符(包括星号),这是正常的安全设置。输入完毕后按回车。

sudo命令用于以超级用户(管理员)权限执行后续的命令,因为安装系统软件需要这些权限。
apt update命令会从Ubuntu软件库下载最新的软件包索引文件。

步骤 2:检查是否已安装SSH服务器(可选)

在某些Ubuntu版本或预配置的环境中,SSH服务器可能已经默认安装。您可以通过以下命令检查OpenSSH服务器的状态:

bash
sudo systemctl status ssh

或者,您也可以检查是否安装了openssh-server软件包:

bash
dpkg -s openssh-server

  • 如果SSH服务器已经安装并正在运行,systemctl status ssh命令会显示服务的状态,通常是 active (running)dpkg -s openssh-server命令则会显示软件包的信息,表明它已安装。
  • 如果SSH服务器未安装或未运行,systemctl status ssh可能会显示inactivedead或其他非active (running)的状态,或者提示服务不存在。dpkg -s openssh-server则会提示找不到软件包。

如果您确认SSH服务器已安装并正在运行,您可以跳过步骤 3。否则,请继续。

步骤 3:安装OpenSSH服务器软件包

使用apt命令安装openssh-server软件包:

bash
sudo apt install openssh-server

当系统提示您确认安装时(例如,询问“Do you want to continue? [Y/n]”),输入Y然后按回车键。

apt install openssh-server命令会从Ubuntu软件库下载并安装OpenSSH服务器及其所有依赖项。安装完成后,SSH服务通常会 自动启动

步骤 4:验证SSH服务状态

安装完成后,您可以再次使用systemctl status ssh命令来验证SSH服务是否正在运行:

bash
sudo systemctl status ssh

您应该看到类似以下的输出,表明服务是活跃的(active)并且正在运行(running):

“`
● ssh.service – OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-26 10:00:00 CST; 10min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4619)
Memory: 3.5M
CPU: 0.040s
CGroup: /system.slice/ssh.service
└─1234 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 start

… (其他日志信息)
“`

  • Loaded: 行显示服务文件的位置以及它是否被设置为开机自启(enabled)。
  • Active: 行显示服务的当前状态和运行时间。确保是active (running)
  • enabled表示SSH服务会在系统启动时自动启动。这是安装时的默认设置,非常方便。

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

bash
sudo systemctl start ssh

如果想确保它开机自启(通常安装时已设置),可以使用:

bash
sudo systemctl enable ssh

至此,您已经在Ubuntu系统上成功安装了SSH服务器。默认配置允许任何拥有系统账户和密码的用户通过SSH连接。

4. 配置SSH服务器

SSH服务器的配置文件是/etc/ssh/sshd_config。通过编辑此文件,您可以调整SSH服务的各种设置,例如更改监听端口、禁用root登录、限制用户等。

步骤 1:备份配置文件

在修改任何配置文件之前,创建一个备份是一个好习惯。如果配置出错,您可以轻松恢复到工作状态。

bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

步骤 2:编辑配置文件

使用您喜欢的文本编辑器(例如nanovim)打开配置文件:

bash
sudo nano /etc/ssh/sshd_config

或者使用vim:

bash
sudo vim /etc/ssh/sshd_config

文件中包含许多配置选项,大多数前面都有#符号,表示该行是注释或该选项使用了默认值。要更改某个选项,找到对应的行,如果前面有#,请删除它,然后修改后面的值。

以下是一些重要且常用的配置选项:

  • Port 指定SSH服务器监听的端口。默认是端口 22。为了增加安全性(尽管这只是一种混淆手段,而非绝对安全),您可以将其更改为非标准端口(例如 2222)。找到或添加以下行,并修改端口号:
    #Port 22
    Port 2222

    重要提示: 如果您更改了端口,请记住新端口号,并且稍后需要在防火墙中允许新端口。

  • PermitRootLogin 控制是否允许root用户通过SSH直接登录。默认通常是yes(在一些旧版本或配置中)或prohibit-password/without-password(推荐)。强烈建议将其设置为no以提高安全性。通过常规用户登录后,再使用sudo切换到root权限。
    #PermitRootLogin yes
    PermitRootLogin no

  • PasswordAuthentication 控制是否允许使用密码进行认证。默认通常是yes。如果您打算使用SSH密钥认证(强烈推荐),并且已经配置好密钥,可以将其设置为no以禁用密码认证,进一步增强安全性。
    #PasswordAuthentication yes
    PasswordAuthentication no

    注意: 在禁用密码认证之前,务必确保您的SSH密钥认证已经设置并可以正常工作,否则您将无法通过SSH登录。

  • AllowUsersDenyUsers 允许或拒绝特定用户通过SSH登录。这些选项非常有用,可以限制只有必要的用户才能访问。

    • AllowUsers user1 user2:只允许user1user2登录。列出多个用户时用空格隔开。
    • DenyUsers user3:拒绝user3登录。
    • 您可以选择使用其中一个,而不是两个都用。如果同时使用,DenyUsers的优先级更高。
  • ListenAddress 指定SSH服务器监听的网络接口的IP地址。如果您的服务器有多个IP地址,您可以使用此选项只在特定的IP上监听。例如:
    #ListenAddress 0.0.0.0 # 监听所有IPv4地址
    #ListenAddress :: # 监听所有IPv6地址
    ListenAddress 192.168.1.100 # 只监听特定IP

修改完成后,保存并关闭文件。在nano编辑器中,按Ctrl + X,然后按Y确认保存,最后按回车确认文件名。

步骤 3:测试SSH配置文件的语法

在重启SSH服务之前,检查配置文件的语法是否有错误是一个非常重要的步骤,以避免因配置错误导致服务无法启动。

bash
sudo sshd -t

如果配置文件没有语法错误,此命令不会有任何输出,光标会直接回到下一行的命令提示符。如果有错误,它会打印出错误信息,您需要根据提示修改配置文件。

步骤 4:重启SSH服务

修改了/etc/ssh/sshd_config文件后,需要重启SSH服务使新的配置生效。

bash
sudo systemctl restart ssh

您可以使用sudo systemctl status ssh再次检查服务状态,确保它已成功重启并仍在运行。

5. 配置防火墙(UFW)

如果您的Ubuntu系统启用了防火墙(如UFW – Uncomplicated Firewall),您需要允许SSH流量通过,否则您将无法从外部连接到SSH服务器。Ubuntu桌面版和服务器版可能默认启用或不启用UFW。

步骤 1:检查UFW状态

首先,检查UFW防火墙的状态:

bash
sudo ufw status

  • 如果状态是inactive,表示防火墙没有启用,您不需要执行接下来的允许端口步骤(但为了安全强烈建议启用防火墙)。
  • 如果状态是active,表示防火墙正在运行,您需要明确允许SSH连接。

步骤 2:允许SSH连接

如果您使用了SSH的默认端口 22,UFW已经知道了SSH服务的应用程序配置,可以直接按服务名称允许:

bash
sudo ufw allow ssh

这会自动配置UFW允许TCP端口 22 的连接。

如果您在sshd_config中更改了SSH端口(例如更改为 2222),您需要允许您设置的新端口:

bash
sudo ufw allow 2222/tcp

请务必将2222替换为您实际使用的端口号。/tcp指定了协议类型。

步骤 3:启用UFW(如果未启用)

如果您的UFW状态是inactive,并且您希望启用它以增强安全性,请使用以下命令:

bash
sudo ufw enable

启用UFW后,它会根据您的配置规则开始过滤流量。重要提示: 在启用UFW之前,务必先允许SSH端口,否则您可能会断开当前的SSH连接并无法再次连接。

启用UFW后,您可以再次运行sudo ufw status verbose来查看详细的防火墙规则,确认SSH端口(无论是默认的 22 还是您自定义的端口)已被正确允许。

6. 从客户端连接到SSH服务器

现在SSH服务器已经安装并配置好了,您可以尝试从另一台计算机连接到它。

您需要知道Ubuntu服务器的IP地址或主机名。在Ubuntu服务器上,您可以使用以下命令查看IP地址:

bash
ip addr show

查找与您的网络接口(例如eth0enpXsX用于有线,wlan0wlpXsX用于无线)关联的IP地址。通常是inet后面的地址(IPv4)或inet6后面的地址(IPv6)。如果您在局域网内,通常是类似192.168.x.x10.x.x.x的地址。

从Linux或macOS客户端连接:

打开终端,使用ssh命令连接。如果使用默认端口 22:

bash
ssh your_username@server_ip_address

your_username替换为您在Ubuntu服务器上的用户名,server_ip_address替换为服务器的IP地址。

如果更改了SSH端口(例如 2222):

bash
ssh -p 2222 your_username@server_ip_address

-p 2222指定了连接的端口号。

首次连接时,SSH客户端会提示您验证服务器的指纹(fingerprint)。这是为了防止中间人攻击。如果指纹是正确的(您可以从服务器端获取指纹进行比对,尽管对于大多数家庭或局域网用户来说这不是必须的),输入yes并回车。服务器的公钥将被添加到客户端的~/.ssh/known_hosts文件中。

之后,系统会提示您输入服务器上your_username的密码。输入正确的密码后,您将成功登录到Ubuntu服务器的命令行界面。

从Windows客户端连接:

较新版本的Windows 10/11 自带了OpenSSH客户端,您可以在命令提示符或PowerShell中使用ssh命令,用法与Linux/macOS类似。

如果Windows没有自带OpenSSH客户端,或者您习惯使用图形界面工具,可以使用PuTTY等第三方SSH客户端。下载并运行PuTTY,在“Host Name (or IP address)”字段输入服务器IP地址,在“Port”字段输入SSH端口(默认为 22),选择连接类型为SSH,然后点击“Open”。首次连接同样会提示验证指纹,之后会要求输入用户名和密码。

7. 进一步增强SSH安全性(重要!)

仅仅安装和基本配置SSH是不够的,特别是如果您的服务器可以通过互联网访问。采取额外的安全措施至关重要。

  • 禁用Root登录: 如前所述,编辑/etc/ssh/sshd_config文件,将PermitRootLogin设置为no。这可以防止攻击者直接尝试破解root用户的密码。
  • 更改默认端口: 虽然不是万能的,但更改SSH默认端口(22)可以减少自动化扫描和脚本攻击。在/etc/ssh/sshd_config中修改Port,并在防火墙中允许新端口。
  • 使用SSH密钥认证(强烈推荐): SSH密钥认证比密码认证更安全,因为它使用一对加密密钥(公钥和私钥)来验证身份。
    • 在客户端生成密钥对:ssh-keygen
    • 将公钥复制到服务器:ssh-copy-id your_username@server_ip_address(如果更改了端口,使用ssh-copy-id -p 2222 your_username@server_ip_address
    • 公钥会被添加到服务器用户主目录下的~/.ssh/authorized_keys文件中。
    • 测试密钥认证是否成功。
    • 如果密钥认证工作正常,可以在/etc/ssh/sshd_config中禁用密码认证:设置PasswordAuthentication no
  • 限制允许登录的用户: 使用AllowUsers配置项,只允许特定的几个用户通过SSH登录。
  • 安装并配置 Fail2ban: Fail2ban 是一个入侵防御框架,可以扫描日志文件(如SSH日志/var/log/auth.log),并根据预设的规则(如多次密码尝试失败)动态地更新防火墙规则,阻止恶意IP地址。安装 Fail2ban 很简单:sudo apt install fail2ban,然后根据需要进行配置。
  • 保持系统更新: 定期运行sudo apt update && sudo apt upgrade来更新系统软件包,包括OpenSSH服务器本身,以修补已知的安全漏洞。

8. 常见问题与故障排除

  • 无法连接:
    • 检查SSH服务状态: 在服务器上运行sudo systemctl status ssh,确保服务正在运行。
    • 检查防火墙: 在服务器上运行sudo ufw status,确保SSH端口(默认 22 或自定义端口)已被允许。
    • 检查IP地址: 确保您使用的是正确的服务器IP地址。
    • 检查端口号: 如果使用了非默认端口,确保客户端连接时指定了正确的端口(使用-p选项)。
    • 检查用户名: 确保您使用了正确的用户名。
    • 网络问题: 检查客户端和服务器之间的网络连接,例如ping服务器IP。
  • 连接被拒绝(Connection refused): 这通常意味着SSH服务没有运行,或者防火墙阻止了连接,或者您连接到了一个没有SSH服务的端口。
  • 权限被拒绝(Permission denied): 这通常意味着用户名或密码不正确。如果您使用密钥认证,检查客户端私钥和服务器公钥是否匹配且权限正确。如果您禁用了root登录,尝试使用普通用户登录。
  • 修改配置后无法登录:
    • 检查/etc/ssh/sshd_config文件是否有语法错误,使用sudo sshd -t进行测试。
    • 如果您禁用了密码认证,但密钥认证未设置好或配置错误,您将无法登录。此时可能需要通过物理访问服务器或使用其他带内管理方式(如KVM)登录进行修复。
    • 如果您更改了端口或防火墙规则,请确保它们相互匹配且正确。
  • 查看SSH日志: SSH服务器的日志通常记录在/var/log/auth.log文件中。您可以使用sudo less /var/log/auth.logsudo journalctl -u ssh来查看最近的连接尝试、认证失败等信息,这对于故障排除非常有帮助。

9. 总结

通过本文的详细步骤,您应该已经在Ubuntu系统上成功安装和配置了OpenSSH服务器。从基础的安装和启动,到修改核心配置文件和设置防火墙规则,再到最后连接测试和重要的安全加固建议,整个过程虽然涉及多个步骤,但每一步都相对直观。

SSH是远程管理Linux系统的基石。掌握SSH的安装、配置和安全使用,将极大地提高您的工作效率和服务器的安全性。请务必重视安全措施,尤其是禁用root登录、使用SSH密钥认证和配置防火墙,以保护您的服务器免受潜在的威胁。随着您对SSH的深入了解,您还可以探索更多高级功能,如SSH隧道、X11转发等。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部