1. 介绍
通过在 Ubuntu 上使用 SSH,您可以安全地远程访问和操作服务器或电脑。本文提供了对 SSH 的详细说明——从基本概念、如何在 Ubuntu 上安装 SSH 服务器,到安全最佳实践和故障排除——使用即使是初学者也能理解的清晰解释。
什么是 SSH?
SSH(Secure Shell)是一种协议,允许在网络上对计算机进行安全的远程连接。与传统的 Telnet 或 FTP 等协议不同,SSH 对通信数据进行加密,显著降低了窃听和篡改的风险。
Ubuntu 上 SSH 的主要使用场景
在 Ubuntu 上使用 SSH 的主要场景包括以下内容:
- 远程服务器管理:从远程位置操作 Ubuntu 服务器
- 文件传输:使用 SCP 或 SFTP 安全地交换文件
- 端口转发:建立安全的远程连接
本文您将学到的内容
- SSH 的基本概念和机制
- 如何在 Ubuntu 上安装 SSH 服务器
- 如何配置 SSH 连接并排除错误
- SSH 的安全最佳实践
2. SSH 的基本概念
要有效使用 SSH,必须了解其核心概念。本章将解释 SSH 的工作原理以及不同的认证方式之间的区别。
SSH 的工作原理
SSH 是一种在客户端和服务器之间建立安全连接的协议。默认情况下,它使用 TCP 端口 22 进行加密通信。
主要特性
- 远程登录:在服务器上执行命令
- 文件传输:通过 SCP 或 SFTP 安全地发送数据
- 端口转发:通过 SSH 连接其他服务
SSH 认证方式
SSH 主要提供两种认证方式:
密码认证
- 使用用户名和密码登录
- 简单,但容易受到暴力破解攻击
公钥认证
- 使用公钥和私钥对进行认证
- 更安全,默认推荐使用
SSH 的优势
- 加密通信:保护传输的数据
- 轻松的远程管理:随时随地访问
- 增强的安全性:帮助防止未授权访问
3. 在 Ubuntu 上安装 SSH 服务器
要在 Ubuntu 上使用 SSH,必须安装 OpenSSH 服务器软件包。本章将说明如何安装并配置它。
安装 OpenSSH 服务器
您可以使用以下命令在 Ubuntu 上安装 OpenSSH 服务器:
sudo apt update
sudo apt install openssh-server
安装完成后,验证 SSH 服务是否正在运行:
sudo systemctl status ssh
启动和管理 SSH 服务
要手动启动或停止 SSH 服务,请使用以下命令:
# Start SSH
sudo systemctl start ssh
# Enable SSH to start automatically after reboot
sudo systemctl enable ssh
# Stop SSH
sudo systemctl stop ssh
配置 UFW(Uncomplicated Firewall)
如果已启用 UFW,SSH 连接可能会被阻止。使用下面的命令允许 SSH 端口(22):
sudo ufw allow ssh
sudo ufw enable
4. 配置 SSH 连接
要安全地使用 SSH,正确的配置至关重要。本章将说明如何设置公钥认证。
生成密钥对
在客户端机器上运行以下命令以生成公钥/私钥对:
ssh-keygen -t rsa -b 4096
默认情况下,私钥存放在 ~/.ssh/id_rsa,公钥存放在 ~/.ssh/id_rsa.pub 中。
将公钥上传到服务器
将生成的公钥传输到 SSH 服务器:
ssh-copy-id username@server-ip-address
或手动传输:
scp ~/.ssh/id_rsa.pub username@server-ip-address:~/
在服务器上,执行以下命令将公钥放置在正确的目录中:
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub
编辑 sshd_config
打开 SSH 配置文件以增强安全设置:
sudo nano /etc/ssh/sshd_config
检查并编辑以下配置项:
# Disable password authentication (use public key only)
PasswordAuthentication no
# Disable root login
PermitRootLogin no
# Change the SSH port (example: 2222)
Port 2222
更改完成后,重启 SSH 服务:
sudo systemctl restart ssh
5. 执行 SSH 连接
在 Ubuntu 上配置好 SSH 服务器后,您可以从客户端机器进行连接。本章节说明在端口被更改时的基本 SSH 用法和连接方式。
基本 SSH 连接命令
使用以下命令从 SSH 客户端连接到服务器:
ssh username@server-ip-address
例如,若服务器 IP 为 192.168.1.10,用户名为 ubuntu,则输入:
ssh ubuntu@192.168.1.10
首次连接时,服务器的指纹会显示。输入 yes 以接受并继续。
更改端口号后的连接方式
如果您更改了 SSH 端口——例如改为 2222——请使用 -p 选项:
ssh -p 2222 ubuntu@192.168.1.10
使用私钥进行连接
如果已配置公钥认证,请使用 -i 选项指定私钥:
ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10
通过 SSH 运行远程命令
您可以直接在远程服务器上运行命令,而无需交互式登录:
ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"
此方式可实现脚本的高效自动化和远程操作。
使用 SCP 传输文件
您可以使用 SSH 在本地 PC 与远程服务器之间传输文件。
本地 → 远程
scp filename username@server-ip-address:/remote/directory
示例:
scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/
远程 → 本地
scp username@server-ip-address:/remote/filename /local/directory
示例:
scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./
使用 SFTP 管理文件
您也可以使用 SFTP 管理文件:
sftp ubuntu@192.168.1.10
连接后,您可以运行以下命令:
ls # List files
cd # Change directory
put filename # Upload a local file to the remote server
get filename # Download a remote file to the local machine
exit # Exit the connection
6. 故障排除 SSH 连接
在使用 SSH 连接时遇到问题并不罕见。本章节描述常见问题及其解决方案。
SSH 连接错误的常见原因及解决方案
当 SSH 连接失败时,原因通常是以下之一:
1. SSH 服务器未运行
首先,确认 SSH 服务器是否正常运行:
sudo systemctl status ssh
解决方案:
- 如果 SSH 服务器已停止,使用以下命令启动它:
sudo systemctl start ssh
- 要使 SSH 在重启后自动启动,运行:
sudo systemctl enable ssh
2. 防火墙 (UFW) 阻止了 SSH
如果启用了 UFW(Uncomplicated Firewall),可能会阻止 SSH 访问:
解决方案:
- 检查当前的 UFW 配置:
sudo ufw status
- 允许 SSH 访问:
sudo ufw allow ssh
(如果使用自定义端口,运行 sudo ufw allow <port-number>)
- 重启 UFW:
sudo ufw reload
3. 端口号已更改
如果 SSH 服务器未使用默认端口 22,连接时必须指定正确的端口:
解决方案:
- 检查服务器上的端口号:
sudo grep Port /etc/ssh/sshd_config
- 在客户端上指定正确的端口:
ssh -p 2222 username@server-ip-address
4. SSH 密钥权限不正确
如果您使用公钥认证,密钥权限不正确可能会阻止连接。
解决方案:
- 设置私钥的权限:
chmod 600 ~/.ssh/id_rsa
- 设置公钥的权限:
chmod 644 ~/.ssh/authorized_keys
5. 主机密钥不匹配
如果服务器上的 SSH 主机密钥已更改,客户端可能会显示错误,例如:“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”
解决方案:
- 删除旧的主机密钥:
ssh-keygen -R <server-ip-address>
- 再次尝试连接:
ssh username@server-ip-address
6. 检查 SSH 日志
要识别详细的 SSH 错误消息,请检查服务器日志文件:
sudo journalctl -u ssh --no-pager | tail -n 20
要实时监控日志,请运行:
sudo tail -f /var/log/auth.log
7. SSH 连接超时问题
如果 SSH 连接缓慢或意外断开,请审查以下要点:
解决方案:
- 启用 KeepAlive 在客户端的
~/.ssh/config中添加以下内容:Host * ServerAliveInterval 60
- 调整服务器上的超时设置 在
/etc/ssh/sshd_config中添加以下内容并重启服务:ClientAliveInterval 60 ClientAliveCountMax 3sudo systemctl restart ssh
总结
SSH 连接问题通常源于以下要点。在大多数情况下,检查这些项目即可解决问题:
✅ 验证 SSH 服务是否正在运行
✅ 检查防火墙是否阻止连接
✅ 确认使用正确的 SSH 端口
✅ 确保 SSH 密钥权限设置正确
✅ 审查 SSH 日志以识别详细错误

7. 增强 SSH 安全性
SSH 是一种强大的远程访问工具,但如果没有适当的安全措施,它可能会成为未经授权访问或暴力破解攻击的目标。本章解释了加强 SSH 安全的推荐设置。
1. 禁用密码认证并使用公钥认证
默认情况下,SSH 允许密码登录,这会增加暴力破解攻击的风险。启用公钥认证并禁用密码认证可以提高安全性。
步骤
- 编辑
sshd_configsudo nano /etc/ssh/sshd_config
- 编辑或添加以下设置
PasswordAuthentication no PubkeyAuthentication yes
- 重启 SSH 服务
sudo systemctl restart ssh
应用此配置后,SSH 将仅接受公钥认证。请确保事先正确配置您的 SSH 密钥。
2. 更改 SSH 端口号
使用默认 SSH 端口 (22) 会使服务器更容易成为攻击者的目标。更改端口号有助于减少未经授权的访问尝试。
步骤
- 打开
sshd_configsudo nano /etc/ssh/sshd_config
- 修改以下行(示例:将端口更改为 2222)
Port 2222
- 通过防火墙允许新端口
sudo ufw allow 2222/tcp
- 重启 SSH 服务
sudo systemctl restart ssh
- 使用新端口测试连接
ssh -p 2222 username@server-ip-address
3. 禁用 Root 登录
默认情况下,SSH 允许 root 登录,这会带来严重的安全风险。建议仅通过普通用户帐户允许 SSH 访问,并在需要管理员权限时使用 sudo。
步骤
- 打开
sshd_configsudo nano /etc/ssh/sshd_config
- 编辑以下行
PermitRootLogin no
- 重启 SSH 服务
sudo systemctl restart ssh
4. 使用 Fail2Ban 防止暴力破解攻击
Fail2Ban 检测未经授权的登录尝试,并自动阻止超过一定失败次数的 IP 地址。
安装和配置
- 安装 Fail2Ban
sudo apt install fail2ban -y
- 复制默认配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 编辑
jail.localsudo nano /etc/fail2ban/jail.local
- 修改
[sshd]部分[sshd] enabled = true maxretry = 5 bantime = 600 findtime = 600
maxretry: 允许的失败登录尝试次数bantime: IP 封锁持续时间(秒)findtime: 计数失败尝试的时间窗口(秒)
- 重启 Fail2Ban
sudo systemctl restart fail2ban
- 检查当前的 Fail2Ban 状态
sudo fail2ban-client status sshd
总结
为了增强 SSH 安全性,请应用以下措施:
✅ 禁用密码认证并使用公钥认证
✅ 更改 SSH 端口以减少攻击暴露
✅ 禁用 root 登录以最小化风险
✅ 使用 Fail2Ban 防止暴力破解攻击
8. 常见问题解答 (FAQ)
本节解答配置和使用 SSH 时常见的疑问和问题。
Q1: 为什么 SSH 显示“连接被拒绝”?
SSH 连接被拒绝可能有多种原因。
主要原因及解决方案:
- SSH 服务未运行
sudo systemctl status ssh
解决方案: 如果服务已停止,请启动它。
sudo systemctl start ssh
- 防火墙 (UFW) 正在阻止 SSH
sudo ufw allow ssh sudo ufw enable
- SSH 端口号已更改 如果 SSH 使用自定义端口,请在连接时指定它。
ssh -p 2222 username@server-ip-address
Q2: 如何更改默认 SSH 端口?
端口 22 是常见的攻击目标,因此更改它可以提高安全性。
步骤:
- 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
- 修改
Port指令Port 2222
- 通过防火墙允许新端口
sudo ufw allow 2222/tcp
- 重启 SSH 服务
sudo systemctl restart ssh
进行这些更改后,使用新端口连接:
ssh -p 2222 username@server-ip-address
Q3: 如果公钥认证不起作用,应该检查什么?
如果 SSH 密钥认证失败,请验证以下内容:
- 确保公钥正确安装
ls -l ~/.ssh/authorized_keys
确保 authorized_keys 存在并包含正确的密钥。
- 检查文件权限
chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
- 验证 SSH 是否允许公钥认证
sudo nano /etc/ssh/sshd_config
确保以下条目存在:
PubkeyAuthentication yes
PasswordAuthentication no
- 重启 SSH 服务
sudo systemctl restart ssh
Q4: 如何仅允许来自特定 IP 地址的 SSH 访问?
将 SSH 访问限制为特定 IP 地址可以显著提高安全性。
方法 1: 编辑 sshd_config
- 打开配置文件
sudo nano /etc/ssh/sshd_config
- 添加
AllowUsers条目AllowUsers username@192.168.1.100
- 重启 SSH 服务
sudo systemctl restart ssh
方法 2: 配置防火墙 (UFW)
- 允许来自特定 IP 的访问
sudo ufw allow from 192.168.1.100 to any port 22
- 拒绝其他来源的访问
sudo ufw deny 22
Q5: 如何更改 SSH 会话超时时间?
如果您的 SSH 会话在空闲后断开,请修改以下设置。
客户端设置
- 在
~/.ssh/config中添加以下内容:Host * ServerAliveInterval 60
服务器端设置
- 编辑
sshd_configsudo nano /etc/ssh/sshd_config
- 添加或修改:
ClientAliveInterval 60 ClientAliveCountMax 3
- 重启 SSH 服务
sudo systemctl restart ssh
总结
本常见问题解答涵盖了最常见的 SSH 问题及其解决方案。出现问题时,请始终检查日志和配置设置,以定位原因。
✅ 如何解决“Connection refused”错误
✅ 如何更改默认 SSH 端口并正确连接
✅ 如何排查公钥认证失败
✅ 如何将 SSH 访问限制到特定 IP 地址
✅ 如何防止 SSH 会话超时
9. 结论
本文阐述了在 Ubuntu 上配置和使用 SSH 的方法,从基础概念到高级安全实践。让我们回顾关键要点。
关键要点
1. SSH 基础
- SSH 通过加密通信实现安全的远程访问。
- 比 Telnet 或 FTP 更安全。
- 认证方式包括 密码认证 和 公钥认证。
2. 安装 SSH 服务器
- 通过
sudo apt install openssh-server安装 OpenSSH。 - 使用
systemctl status ssh验证服务状态。 - 使用
sudo ufw allow ssh通过 UFW 允许 SSH 访问。
3. 配置 SSH 访问
- 使用
ssh username@server-ip-address进行连接。 - 使用公钥认证以提升安全性。
- 如有需要,可在
sshd_config中禁用密码认证。
4. 故障排查
- 检查 SSH 是否在运行(
systemctl status ssh)。 - 如果更改了端口,请指定正确的端口(
ssh -p 2222 username@IP)。 - 验证
~/.ssh/authorized_keys中的密钥权限。
5. 安全增强
- 禁用密码认证,改用公钥。
- 更改 SSH 端口,以降低扫描攻击。
- 使用 Fail2Ban 阻止重复的登录失败。
- 在可能的情况下 将 SSH 访问限制到特定 IP 地址。
其他学习资源
要深入了解 SSH,请参考以下资源:
📚 官方文档
🛠 相关工具
- PuTTY:在 Windows 上进行 SSH 访问
- 下载 PuTTY
- MobaXterm:高级 SSH 功能
- MobaXterm 官方网站
🎥 推荐视频
- 在 YouTube 上搜索 “Ubuntu SSH setup” 以查找适合初学者的教程。
作成した動画を友だち、家族、世界中の人たちと共有…
下一步
了解 SSH 工作原理后,探索更高级的用法:
✅ 使用 Ansible 通过 SSH 自动化服务器管理
- 适用于高效管理多台服务器。
✅ SSH 隧道和端口转发
- 使用 SSH 保护远程桌面连接或创建类似 VPN 的隧道。
✅ 监控 SSH 日志并提升安全性
- 使用
fail2ban、logwatch等工具监控可疑活动。
最后思考
感谢您阅读至本指南的结尾! 🎉
在 Ubuntu 上正确配置 SSH 能显著提升远程管理的效率和安全性。
在持续学习的过程中,探索诸如安全隧道和主动监控等高级技术,以构建更为稳健的系统。
祝您拥有安全高效的 SSH 使用体验! 🖥️🔐
