在现代的服务器管理和远程桌面操作中,安全壳协议(SSH, Secure Shell)是不可或缺的工具。对于广受欢迎的Linux发行版Ubuntu而言,启动SSH服务是实现远程管理、文件传输以及执行远程命令的基础。本文将深入探讨在Ubuntu系统上如何全面地安装、配置、启动以及管理SSH服务,并提供必要的安全建议,确保您的远程连接既方便又安全。
什么是SSH?以及为何在Ubuntu上启动它?
SSH 是一种加密的网络协议,它允许两台计算机之间通过不安全的网络进行安全的通信。简单来说,它为远程登录和远程命令执行提供了一个安全的通道。与传统的Telnet等不安全协议不同,SSH对所有传输的数据进行加密,有效防止了信息窃听和篡改。
在Ubuntu系统上启动SSH服务,通常意味着您需要:
- 从远程计算机管理Ubuntu服务器或桌面系统。
- 通过SCP(Secure Copy Protocol)或SFTP(SSH File Transfer Protocol)安全地传输文件。
- 无需物理接触,即可在远程Ubuntu机器上运行命令、安装软件或配置服务。
- 作为跳板机,通过SSH隧道访问内部网络资源。
无论是搭建网站、部署应用,还是进行日常的系统维护,SSH都是Ubuntu用户不可或缺的利器。
在Ubuntu上安装OpenSSH服务器
在Ubuntu上启动SSH服务的第一步,是确保OpenSSH服务器端程序已经安装。OpenSSH是SSH协议的免费开源实现,广泛应用于各类Linux发行版。
1. 更新软件包列表
在安装任何新软件之前,始终建议更新系统的软件包列表,以确保您获取的是最新版本的软件包信息:
sudo apt update
2. 安装OpenSSH服务器
执行以下命令来安装OpenSSH服务器:
sudo apt install openssh-server
系统可能会提示您确认安装,输入 Y 并按回车键即可。
3. 验证SSH服务状态
安装完成后,OpenSSH服务通常会自动启动。您可以通过以下命令检查其运行状态:
systemctl status ssh
如果服务正在运行,您会看到类似于 Active: active (running) 的输出。如果状态显示为 inactive,则需要手动启动。
启动与管理SSH服务
即使服务已经安装,了解如何手动启动、停止、重启以及配置SSH服务在系统启动时自动运行,对于日常管理至关重要。
1. 启动SSH服务
如果SSH服务未运行,您可以使用以下命令启动它:
sudo systemctl start ssh
2. 停止SSH服务
当您需要维护或暂时禁用SSH访问时,可以停止服务:
sudo systemctl stop ssh
3. 重启SSH服务
在修改了SSH配置文件后,通常需要重启服务以使更改生效:
sudo systemctl restart ssh
4. 配置SSH服务开机自启动
为了确保您的Ubuntu系统在每次启动后都能提供SSH服务,您应该启用其开机自启动功能:
sudo systemctl enable ssh
这将创建一个符号链接,确保SSH服务在系统启动时被自动加载。
5. 禁用SSH服务开机自启动
如果出于安全或其他考虑,您不希望SSH服务随系统启动,可以使用以下命令禁用:
sudo systemctl disable ssh
配置SSH服务 (安全性与端口)
虽然默认配置足以启动SSH,但为了提高安全性并满足特定需求,您可能需要修改OpenSSH服务器的配置文件 /etc/ssh/sshd_config。
1. 编辑SSH配置文件
使用您喜欢的文本编辑器(如Nano或Vim)打开配置文件:
sudo nano /etc/ssh/sshd_config
2. 常用配置项
a. 修改SSH默认端口 (强烈推荐)
默认的SSH端口是22。为了增加安全性,避免常见的端口扫描攻击,建议将其修改为一个不常用的端口号(如2222, 22022等)。找到以下行并取消注释(如果被注释),然后修改端口号:
#Port 22修改为:
Port 2222
请记住您设置的新端口号,因为在连接时需要指定它。
b. 禁用Root用户登录 (强烈推荐)
直接允许root用户通过SSH登录存在安全风险。建议创建一个普通用户进行登录,然后使用 sudo 命令执行需要root权限的操作。找到以下行并修改:
#PermitRootLogin prohibit-password修改为:
PermitRootLogin no
或者,更安全的选项是使用密钥认证并禁用密码登录:
PermitRootLogin yes(如果使用密钥认证,此项可保持)并确保
PasswordAuthentication no(如果使用密钥认证)
c. 禁用密码认证 (更高级的安全性,推荐使用密钥认证)
使用SSH密钥对进行认证比密码认证更加安全。如果您已经设置了SSH密钥认证,可以禁用密码认证:
#PasswordAuthentication yes修改为:
PasswordAuthentication no
d. 允许或拒绝特定用户登录
您可以指定哪些用户可以或不能通过SSH登录。例如:
- 仅允许
your_user和admin_user登录: - 拒绝
guest_user登录:
AllowUsers your_user admin_user
DenyUsers guest_user
3. 保存并重启SSH服务
完成配置文件修改后,保存文件并退出编辑器。然后重启SSH服务以应用更改:
sudo systemctl restart ssh
如果配置有误,SSH服务可能无法启动。您可以使用 sudo systemctl status ssh 或 sudo journalctl -xe | grep sshd 来检查错误日志。
配置防火墙 (UFW)
Ubuntu默认自带了Uncomplicated Firewall (UFW),它是一个用户友好的iptables前端。为了允许外部连接到SSH服务,您需要配置UFW以放行SSH端口。
1. 检查UFW状态
首先,检查UFW是否启用:
sudo ufw status
如果显示 Status: inactive,则UFW未启用。
2. 允许SSH连接
如果您使用的是SSH默认端口22,可以直接允许SSH服务:
sudo ufw allow ssh
如果您修改了SSH端口(例如2222),则需要明确指定端口号:
sudo ufw allow 2222/tcp
3. 启用UFW (如果未启用)
如果您之前未启用UFW,现在可以启用它。请注意,启用UFW会立即生效,确保您已允许SSH端口,以免将自己锁定在服务器之外:
sudo ufw enable
系统会提示您确认,输入 Y 并回车。
4. 再次检查UFW状态
确认SSH规则已被添加且UFW已启用:
sudo ufw status
您应该能看到 Status: active 并且 22/tcp (SSH) 或您自定义的端口处于 ALLOW 状态。
测试SSH连接
SSH服务和防火墙都配置好之后,是时候测试连接了。
1. 从本地测试 (在Ubuntu本机上)
您可以尝试从Ubuntu本机连接到SSH服务,以确认服务是否正常运行:
ssh your_username@localhost
如果连接成功,说明SSH服务正常监听。
2. 从远程计算机测试
在另一台电脑(无论是Linux、macOS还是Windows,需要安装SSH客户端,Windows 10/11自带)上,使用以下命令连接到您的Ubuntu系统:
ssh your_username@your_ubuntu_ip_address
如果您修改了SSH端口,则需要指定端口号:
ssh -p 2222 your_username@your_ubuntu_ip_address
首次连接时,系统会提示您确认服务器的RSA指纹,输入 yes 并回车。然后输入您的用户密码即可登录。
恭喜!您已成功在Ubuntu上启动并配置了SSH服务,现在可以安全地进行远程管理了。
常见问题 (FAQ)
Q: 如何查找我的Ubuntu服务器的IP地址?
A: 您可以在Ubuntu系统上打开终端,输入命令 ip a 或 ifconfig(如果未安装,请安装 net-tools 包)来查看当前网络的IP地址。通常,您会看到一个类似于 inet 192.168.1.100/24 的地址,这就是您的局域网IP。如果是云服务器,其公网IP由服务提供商分配。
Q: 为何我无法从远程连接到Ubuntu的SSH服务?
A: 常见原因包括:SSH服务未运行(使用 systemctl status ssh 检查);防火墙(如UFW)未放行SSH端口(使用 sudo ufw status 检查并允许);IP地址或端口号输入错误;网络路由问题(如路由器端口转发未设置);或SSH配置文件中存在错误导致服务无法启动。
Q: 如何更改SSH默认的22端口?
A: 编辑 /etc/ssh/sshd_config 文件,找到 #Port 22 一行,将其修改为所需的端口号(例如 Port 2222),并删除行首的注释符 #。保存文件后,使用 sudo systemctl restart ssh 重启SSH服务。如果UFW已启用,请务必使用 sudo ufw allow 新端口号/tcp 命令放行新端口。
Q: 我是否可以将Root用户通过SSH登录?为何不推荐?
A: 尽管可以在 /etc/ssh/sshd_config 中设置 PermitRootLogin yes 允许Root用户登录,但强烈不推荐这样做。Root用户拥有系统最高权限,如果其密码泄露或被破解,攻击者将完全控制您的系统。最佳实践是创建普通用户登录,然后使用 sudo 命令执行管理任务。
Q: 如果我的SSH客户端没有 ssh 命令怎么办?
A: 如果您在客户端机器(比如另一台Linux或macOS)上尝试使用 ssh 命令但提示找不到,这意味着您可能没有安装SSH客户端。在Debian/Ubuntu系系统上,您可以通过 sudo apt install openssh-client 来安装。macOS和Windows 10/11通常自带SSH客户端。

