- 1 1. 介绍
- 2 2. 基本 SSH 配置
- 3 结论
- 4 3. 加强 SSH 安全
- 5 结论
- 6 4. 高级 SSH 配置
- 7 结论
- 8 5. SSH 故障排除
- 9 结论
- 10 6. 常见问题解答 (FAQ)
- 11 结论
1. 介绍
在 Ubuntu 上配置 SSH 对于管理远程服务器至关重要。SSH(Secure Shell)是一种提供安全加密通信的协议,允许用户远程访问服务器、执行命令并传输文件。
本文解释了如何在 Ubuntu 上配置 SSH,从基本安装步骤到高级安全措施。
1.1 为什么在 Ubuntu 上配置 SSH?
1.1.1 什么是 SSH?
SSH(Secure Shell)是一种在网络上实现安全通信的协议。它通常用于登录远程服务器、传输文件以及隧道(端口转发)。与传统的 Telnet 或 FTP 不同,SSH 会加密所有通信,提供强大的安全性。
1.1.2 何时在 Ubuntu 上需要 SSH
SSH 用于远程管理 Ubuntu 的常见场景包括:
- 云服务器管理:AWS、GCP、Vultr 等上的 Linux 服务器通常通过 SSH 访问。
- 局域网环境中的远程操作:远程访问内部服务器或开发机器。
- 管理 IoT 设备:远程控制嵌入式系统,例如 Raspberry Pi。
默认情况下,Ubuntu 上的 SSH 服务器是禁用的,因此必须手动安装并配置以启用 SSH 访问。
2. 基本 SSH 配置
要在 Ubuntu 上使用 SSH,您必须安装 SSH 服务器(OpenSSH)并正确配置它。本节解释了如何安装 SSH、调整基本设置、配置防火墙以及连接到服务器。
2.1 安装并启动 OpenSSH
2.1.1 什么是 OpenSSH?
OpenSSH(Open Secure Shell)是 SSH 协议的开源实现。它支持远程连接、安全文件传输(SCP 和 SFTP)以及端口转发。
2.1.2 安装 OpenSSH
Ubuntu 默认不包含 SSH 服务器,因此使用以下命令安装它:
sudo apt update && sudo apt install -y openssh-server
此命令会更新软件包列表并安装 OpenSSH 服务器。
2.1.3 启动 SSH 并启用自动启动
安装后,启动 SSH 服务器并启用自动启动:
sudo systemctl enable --now ssh
enable 选项确保操作系统启动时 SSH 会自动启动。
2.1.4 检查 SSH 状态
验证 SSH 是否正在运行:
systemctl status ssh
如果输出显示 active (running),则 SSH 运行正常:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago
如果显示 inactive (dead) 或 failed,则手动启动 SSH:
sudo systemctl start ssh
2.2 配置防火墙(UFW)
Ubuntu 包含一个简单的防火墙称为 ufw(Uncomplicated Firewall)。您必须允许通过它进行 SSH 连接。
2.2.1 检查 UFW 状态
sudo ufw status
示例输出(未激活):
Status: inactive
示例输出(已激活):
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
2.2.2 允许 SSH
sudo ufw allow ssh
或明确指定:
sudo ufw allow 22/tcp
2.2.3 启用 UFW
sudo ufw enable
2.2.4 验证 UFW 规则
sudo ufw status verbose
示例:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
2.3 基本 SSH 连接方法
一旦 SSH 运行,您就可以从客户端机器连接。
2.3.1 从 Linux/macOS 连接
ssh username@server-ip-address
示例:
ssh user@192.168.1.100
首次连接时,您可能会看到安全警告:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?
输入 yes 以继续。
2.3.2 从 Windows 连接
您可以使用 PowerShell 或 PuTTY。
使用 PowerShell(Windows 10+ 包含 SSH):
ssh username@server-ip-address
使用 PuTTY:
- 从官方网站下载 PuTTY。
- 打开 PuTTY 并在
Host Name (or IP address)中输入服务器 IP。 - 将连接类型选择为
SSH。 - 点击 Open 并登录
结论
本节介绍了在 Ubuntu 上设置 SSH 的基础内容:
- 如何安装并启动 OpenSSH
- 如何使用 UFW 允许 SSH 连接
- 如何从 Linux/macOS 和 Windows 连接
3. 加强 SSH 安全
SSH 功能强大,但保持默认设置会增加安全风险。攻击者常常尝试暴力登录或端口扫描。加强 SSH 安全至关重要。
3.1 禁用 Root 登录
Root 登录提供完整的系统控制,是攻击者的主要目标。禁用它可以提升安全性。
3.1.1 步骤
- 编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
- 将该行更改为:
PermitRootLogin no
- 重启 SSH:
sudo systemctl restart ssh
- 确认更改:
sudo grep PermitRootLogin /etc/ssh/sshd_config
如果输出为 PermitRootLogin no,则表示已应用该设置。
3.2 禁用密码认证并使用密钥认证
公钥认证比密码更安全,并降低暴力攻击的风险。
3.2.1 创建 SSH 密钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
这将生成两个文件:
- id_rsa(私钥) — 本地保存,切勿共享
- id_rsa.pub(公钥) — 上传到服务器
3.2.2 上传公钥
ssh-copy-id username@server-ip-address
3.2.3 禁用密码认证
sudo nano /etc/ssh/sshd_config
编辑:
PasswordAuthentication no
重启 SSH:
sudo systemctl restart ssh
3.3 仅允许特定用户访问 SSH
为了提升 SSH 安全性,您可以限制访问,仅允许特定用户登录。
3.3.1 配置步骤
- 打开 SSH 配置文件
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
- 添加允许通过 SSH 访问的用户:
AllowUsers username1 username2
- 重启 SSH 以应用设置:
sudo systemctl restart ssh
3.4 更改 SSH 端口
由于端口 22 常被攻击者盯上,更改默认端口可以提升安全性。
3.4.1 配置步骤
- 打开 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
- 修改端口设置,例如:
Port 2200
- 重启 SSH:
sudo systemctl restart ssh
3.4.2 更新防火墙设置
如果更改端口,需要更新 UFW:
sudo ufw allow 2200/tcp
检查新规则:
sudo ufw status
3.5 使用 Fail2Ban 防止暴力攻击
Fail2Ban 检测登录失败并在指定时间内阻止攻击 IP。
3.5.1 安装 Fail2Ban
sudo apt install fail2ban -y
3.5.2 创建配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
打开文件:
sudo nano /etc/fail2ban/jail.local
修改设置:
[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600
3.5.3 重启 Fail2Ban
sudo systemctl restart fail2ban
3.5.4 检查封禁列表
sudo fail2ban-client status sshd
结论
本节解释了加强 SSH 安全性的方法:
- 禁用 root 登录
- 禁用密码认证并启用密钥认证
- 限制 SSH 访问仅限特定用户
- 更改 SSH 端口
- 使用 Fail2Ban 阻止未授权尝试
实施这些设置有助于创建安全的 SSH 环境。

4. 高级 SSH 配置
在完成基本的 SSH 配置和安全加固后,您可以继续使用高级功能,以提升灵活性和安全性。本节涵盖 ssh.socket 管理(Ubuntu 22.10+)、SSH 隧道、多端口监听以及基于 IP 的访问控制。
4.1 在 Ubuntu 22.10+ 上使用 ssh.socket
在 Ubuntu 22.10+ 中,SSH 可能由 ssh.socket 而非 ssh.service 管理。这种基于套接字的激活仅在需要时启动 SSH,节省系统资源。
4.1.1 检查 ssh.socket 状态
sudo systemctl status ssh.socket
示例输出(已启用):
● ssh.socket - OpenSSH Server Socket
Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
Active: active (listening) since Fri 2025-02-28 12:00:00 UTC
4.1.2 启用或禁用 ssh.socket
启用套接字:
sudo systemctl enable --now ssh.socket
切换回传统的 ssh.service:
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
4.2 SSH 隧道(端口转发)
SSH 隧道在本地和远程系统之间建立安全的通信通道。
4.2.1 本地端口转发
用于安全连接远程数据库或内部服务。
示例:访问端口 3306 上的远程 MySQL 服务器
ssh -L 3306:localhost:3306 username@server-ip-address
4.2.2 反向端口转发
通过远程服务器公开本地服务。
示例:在远程端口 8080 上发布本地 Web 服务器
ssh -R 8080:localhost:80 username@server-ip-address
4.2.3 动态端口转发(SOCKS 代理)
使用 SSH 作为 SOCKS 代理进行匿名浏览。
ssh -D 1080 username@server-ip-address
4.3 多端口监听
SSH 可以监听多个端口,以适应不同网络环境的灵活性。
4.3.1 配置步骤
- 编辑
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
- 添加多行
Port:Port 22 Port 2200
- 重启 SSH:
sudo systemctl restart ssh
- 使用 UFW 允许新端口:
sudo ufw allow 2200/tcp
4.4 仅允许特定 IP 地址访问 SSH
通过 IP 地址限制 SSH 访问可提供强大的安全控制。
4.4.1 配置 /etc/hosts.allow
sudo nano /etc/hosts.allow
添加允许的 IP 地址:
sshd: 192.168.1.100
4.4.2 配置 /etc/hosts.deny
sudo nano /etc/hosts.deny
拒绝所有其他访问:
sshd: ALL
结论
本节涵盖了高级 SSH 配置主题:
- 在 Ubuntu 22.10+ 中管理
ssh.socket - 使用 SSH 隧道(端口转发)
- 多端口监听 SSH
- 限制 SSH 访问仅限特定 IP 地址
应用这些配置可提升安全性和可用性。
5. SSH 故障排除
即使配置正确,SSH 连接有时仍会失败。本节解释常见的 SSH 问题及其解决方案。
5.1 当 SSH 无法连接
如果 SSH 返回 Connection refused 或超时,可能的原因包括服务问题、端口配置错误或防火墙限制。
5.1.1 SSH 服务未运行
sudo systemctl status ssh
解决方案:
- 如果状态为
inactive或failed,请重启 SSH:sudo systemctl restart ssh
- 启用自动启动:
sudo systemctl enable ssh
5.1.2 SSH 端口未打开
ssh -p 2200 username@server-ip-address
检查打开的端口:
sudo netstat -tulnp | grep ssh
或:
ss -tulnp | grep ssh
5.1.3 防火墙 (UFW) 阻止 SSH
sudo ufw status
允许 SSH:
sudo ufw allow 22/tcp
如果使用自定义端口:
sudo ufw allow 2200/tcp
5.2 身份验证错误
5.2.1 用户名或密码错误
ssh username@server-ip-address
5.2.2 公钥未正确安装
cat ~/.ssh/authorized_keys
确认它与本地 id_rsa.pub 匹配。
5.2.3 .ssh 目录权限不正确
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
还要确保:
chmod 755 /home/username
5.3 SSH 连接不稳定或意外断开
5.3.1 调整 ClientAliveInterval
ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh
5.3.2 调整本地客户端设置
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
5.4 查看 SSH 日志
5.4.1 实时查看日志
sudo journalctl -u ssh -f
5.4.2 查看历史日志
sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log
结论
本节解释了常见的 SSH 问题及其解决方法:
- 检查 SSH 服务是否正在运行
- 验证端口是否打开
- 检查防火墙设置
- 确保正确的密钥认证
- 修复超时和断开连接的问题
- 分析 SSH 日志
大多数 SSH 问题源于配置错误或网络限制。使用这些故障排除步骤可以高效地解决问题。
6. 常见问题解答 (FAQ)
本节回答了与 SSH 使用和配置相关的常见问题。
6.1 如何解决 SSH 超时问题?
6.1.1 服务器端设置
ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh
6.1.2 客户端设置
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
6.2 如果忘记 SSH 密码该怎么办?
6.2.1 如果您拥有物理访问权限
- 进入单用户模式(在 GRUB 中选择
recovery mode) - 重置密码:
passwd username
- 重启系统
6.2.2 如果无法获得物理访问(云 VPS)
- 使用托管服务提供的 VPS 控制台
- 使用公钥认证
6.3 如何在 Windows 上使用 SSH?
6.3.1 使用 PowerShell
ssh username@server-ip-address
6.3.2 使用 PuTTY
- 下载并安装 PuTTY
- 在
Host Name中输入服务器 IP 地址 - 将连接类型选择为
SSH - 使用用户名和密码登录
6.4 如何在 Ubuntu WSL 上配置 SSH?
6.4.1 安装 SSH 服务器
sudo apt update && sudo apt install openssh-server
6.4.2 修改 SSH 设置
PasswordAuthentication yes
手动启动 SSH(WSL 不使用 systemd):
sudo service ssh start
6.5 其他安全最佳实践
6.5.1 使用 Fail2Ban
sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban
6.5.2 更改 SSH 端口
Port 2200
sudo ufw allow 2200/tcp
6.6 如何实时监控 SSH 日志?
sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh
6.7 更方便使用 SSH 的技巧
6.7.1 使用 .ssh/config 简化登录
Host myserver
HostName 192.168.1.100
User user
Port 2200
IdentityFile ~/.ssh/id_rsa
然后使用以下方式连接:
ssh myserver
6.7.2 使用 ssh-agent
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
结论
本节总结了与 SSH 相关的常见问题:
- 如何解决 SSH 超时问题
- 如何恢复忘记的密码
- 如何在 Windows 和 WSL 上使用 SSH
- 安全最佳实践
- 如何检查 SSH 日志
- 使用
.ssh/config提高 SSH 便利性的技巧
通过应用这些技术,您可以构建安全高效的 SSH 环境,并顺畅地管理远程服务器。



