Ubuntu配置SSH:从安装到安全加固的实操记录

为什么需要配置SSH

SSH(Secure Shell)是Linux系统中最常用的远程管理协议。对于Ubuntu用户来说,无论是管理服务器、传输文件,还是远程执行命令,SSH都是必不可少的工具。默认情况下,Ubuntu桌面版并未安装SSH服务端,而服务器版则默认安装了openssh-server。本文将以Ubuntu 22.04 LTS为示例,从安装、配置到安全加固,完整记录SSH服务的配置过程。

Ubuntu配置SSH:从安装到安全加固的实操记录
Ubuntu配置SSH:从安装到安全加固的实操记录

第一步:安装OpenSSH服务端

在开始之前,建议先更新软件包索引,确保安装的软件包为最新版本。

sudo apt update

然后安装openssh-server软件包:

sudo apt install openssh-server -y

安装完成后,SSH服务会自动启动。可以通过以下命令确认服务状态:

sudo systemctl status ssh

如果输出中显示“active (running)”,说明服务正在运行。若未运行,可以手动启动:

sudo systemctl start ssh

同时,建议设置开机自启动:

sudo systemctl enable ssh

验证SSH是否安装成功

在本地终端执行以下命令,检查22端口是否监听:

sudo ss -tlnp | grep :22

如果看到类似 LISTEN 0 128 0.0.0.0:22 的输出,说明SSH服务已正常监听。此时,可以从另一台电脑尝试连接:

ssh 用户名@服务器IP地址

第二步:基础配置SSH服务

SSH的配置文件位于 /etc/ssh/sshd_config。修改此文件前,建议先备份原文件:

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

使用编辑器打开配置文件:

sudo nano /etc/ssh/sshd_config

以下是一些常用的基础配置项:

修改默认端口

默认端口为22,为了减少被扫描攻击的风险,可以修改为其他端口(如2222):

Port 2222

修改后,连接时需指定端口:ssh -p 2222 用户名@IP

禁止root用户直接登录

出于安全考虑,建议禁止root直接SSH登录,改用普通用户登录后通过sudo提权:

PermitRootLogin no

限制允许登录的用户

如果希望只允许特定用户登录,可以添加:

AllowUsers alice bob

这样,只有alice和bob可以SSH登录,其他用户会被拒绝。

启用公钥认证

公钥认证比密码认证更安全。首先在客户端生成密钥对(若已生成可跳过):

ssh-keygen -t rsa -b 4096

然后将公钥复制到服务器:

ssh-copy-id 用户名@服务器IP

在配置文件中确保以下项未被注释:

PubkeyAuthentication yes

第三步:配置防火墙与网络访问

Ubuntu默认使用ufw作为防火墙管理工具。如果启用了ufw,需要放行SSH端口。

放行默认22端口

sudo ufw allow ssh

若修改了端口,放行自定义端口

sudo ufw allow 2222/tcp

然后重新加载防火墙:

sudo ufw reload

查看防火墙状态,确认规则已生效:

sudo ufw status

另外,如果服务器在云环境(如阿里云、AWS),还需要在安全组中放行对应端口。

第四步:重启SSH服务使配置生效

每次修改 sshd_config 后,都需要重启SSH服务:

sudo systemctl restart ssh

重启前建议先检查配置文件语法是否正确:

sudo sshd -t

如果输出没有错误,再执行重启。注意,重启SSH不会断开当前已有的连接,但新连接会使用新配置。

第五步:SSH安全加固建议

仅仅完成安装和基础配置还不够,以下措施能显著提升SSH的安全性。

  • 禁用密码认证:在配置文件中设置 PasswordAuthentication no,仅允许密钥登录。这会彻底杜绝暴力破解密码的风险。
  • 设置空闲超时:添加 ClientAliveInterval 300ClientAliveCountMax 2,如果客户端5分钟无操作,服务器将断开连接。
  • 限制SSH访问来源IP:通过防火墙或TCP Wrappers(/etc/hosts.allow/etc/hosts.deny)限制仅允许特定IP段连接。例如在ufw中:sudo ufw allow from 192.168.1.0/24 to any port 22
  • 使用Fail2ban:安装fail2ban可以自动封禁多次尝试失败的IP。
sudo apt install fail2ban -y

安装后,fail2ban默认会监控SSH日志,并自动封禁恶意IP。

第六步:常见问题排查

1. 无法连接SSH服务

首先检查服务是否运行:sudo systemctl status ssh。然后查看端口是否监听:sudo ss -tlnp | grep 22。接着检查防火墙是否放行端口:sudo ufw status。最后确认目标IP是否正确,以及网络是否可达。

2. 连接被拒绝(Connection refused)

这通常意味着SSH服务未运行,或者端口被防火墙拦截。按上述顺序排查即可。

3. 密码正确但无法登录

检查 sshd_config 中是否设置了 AllowUsersDenyUsers,以及 PasswordAuthentication 是否为yes。修改后重启服务。

4. 密钥登录失败

检查客户端公钥是否已添加到服务器的 ~/.ssh/authorized_keys 文件中,且该文件的权限应为600,目录权限应为700:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

同时检查服务器端 PubkeyAuthentication 是否为yes。

第七步:使用SSH的实用技巧

  1. 免密登录:使用密钥对后,每次登录不再需要输入密码。
  2. 别名连接:在客户端的 ~/.ssh/config 文件中配置别名,例如:
    Host myserver
    HostName 192.168.1.100
    User alice
    Port 2222

    之后只需输入 ssh myserver 即可连接。

  3. 文件传输:使用 scpsftp 命令在本地与服务器之间传输文件。例如:scp file.txt alice@server:/home/alice/
  4. 端口转发:通过 ssh -L 本地端口:目标地址:目标端口 用户@服务器 实现隧道访问内网服务。

总结

在Ubuntu上配置SSH并不复杂,关键在于理解每个配置项的作用,并根据实际场景进行安全加固。本文从安装、基础配置、防火墙、安全加固到问题排查,覆盖了SSH配置的完整流程。建议读者在配置完成后,使用 sudo sshd -t 检查语法,并重启服务验证。对于生产环境,务必禁用密码登录、修改默认端口,并启用fail2ban等防护工具。通过合理的配置,SSH将成为你管理Ubuntu系统时最可靠、最安全的远程通道。

发表评论