当你用SSH连接Ubuntu服务器时,是不是遇到过连半天没反应、频繁被攻击提示、传大文件卡到爆的情况?别着急,今天就从连接速度优化和安全加固两方面,给大家讲一套实用的方案,不管你是刚入门的开发者还是有经验的运维,都能直接用上。

一、SSH连接速度优化

SSH默认配置为了兼容各种场景留了很多冗余设置,直接用会拖慢连接和传输效率,下面这些调整能明显改善体验。

1.1 关闭无用的SSH服务组件

SSH服务启动时会加载一些普通用户几乎用不到的组件,这些组件会消耗连接时间和服务器资源,直接关掉就行。

# 先备份原配置,避免改坏后无法恢复
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑SSH配置文件
sudo nano /etc/ssh/sshd_config

找到配置文件后,修改或添加以下内容:

# 关闭反向DNS解析,连接时不用花时间查客户端IP对应的主机名,直接提速
UseDNS no
# 关闭Kerberos认证,普通开发场景用不到,减少服务端处理流程
GSSAPIAuthentication no

改完后重启服务让配置生效:

sudo systemctl restart sshd

1.2 调整SSH连接的超时与并发参数

默认的并发和超时设置太保守,容易浪费资源或者限制多连接场景。比如你要同时传多个文件,或者开多个终端连服务器,调整参数会更灵活。 同样编辑/etc/ssh/sshd_config,添加或修改:

# MaxStartups格式为「允许的初始连接数: 前X%无限制: 超过后拒绝的比例」,改成最多30个初始连接,兼顾性能和并发
MaxStartups 30:60:90
# 把登录超时从默认120秒改成10秒,避免半连接状态占用服务器资源(比如有人只连不操作)
LoginGraceTime 10

保存后重启服务即可,不用重启的话也可以用sudo systemctl reload sshd,不会中断现有连接。

1.3 本地客户端的SSH连接复用

如果是开发者,每天会用SSH连服务器做部署、传文件,每次都要重新握手验证身份太麻烦,也慢。本地配置连接复用后,同一个服务器的后续连接会直接复用已建立的通道,不用重复做加密握手。

# 编辑本地SSH客户端配置,没有则创建
nano ~/.ssh/config

添加以下内容:

Host *
    # 启用连接复用,匹配所有Host的连接
    ControlMaster auto
    # 复用连接的存储路径,每个服务器对应一个独立的连接文件,避免冲突
    ControlPath ~/.ssh/master-%r@%h:%p
    # 复用连接10分钟无操作自动关闭,防止长期占用资源
    ControlPersist 10m

设置完后,第一次连服务器正常输入密码,之后的scpssh命令都会自动复用连接,速度提升很明显。

二、SSH安全设置

SSH默认配置是通用版,公网场景下很容易被暴力破解、端口扫描,尤其是默认端口22,每天会被上万次扫描,下面这些设置能大幅提升服务器安全性。

2.1 更换默认SSH端口

把默认的22端口改成一个不常用的端口,能躲开大部分自动化脚本的批量扫描,虽然不能完全防攻击,但能降低90%以上的脚本攻击风险。 编辑/etc/ssh/sshd_config,把Port 22改成自定义端口,比如2222:

Port 2222

改完后先放行新端口,再关闭旧端口,绝对不能反过来,不然会把自己锁在服务器外面:

# 防火墙放行新端口,Ubuntu默认用ufw,没开的话先装sudo apt install ufw
sudo ufw allow 2222/tcp
# 关闭旧的22端口,避免旧规则生效
sudo ufw deny 22/tcp
# 查看规则确认配置生效
sudo ufw status

2.2 禁用密码登录,只用密钥登录

密码登录是SSH被暴力破解的主要入口,用密钥登录后,黑客就算拿到端口也拿不到你的私钥,几乎不可能破解。

步骤1:生成SSH密钥对(本地客户端操作)

# 4096位RSA密钥,比默认的2048位更安全,一路回车即可(也可以设置私钥密码,防止私钥被盗用)
ssh-keygen -t rsa -b 4096

生成后会在~/.ssh/目录下得到两个文件:id_rsa(私钥,一定要保密)和id_rsa.pub(公钥,传到服务器)。

步骤2:把公钥传到Ubuntu服务器

# 替换成你的服务器IP和新的SSH端口,会提示输入服务器密码
ssh-copy-id -i ~/.ssh/id_rsa.pub 你的服务器用户名@服务器IP -p 2222

步骤3:服务器端禁用密码登录

编辑服务器的/etc/ssh/sshd_config,修改:

# 禁止密码登录,只允许密钥验证
PasswordAuthentication no
# 禁止root用密码登录,只允许密钥(更安全,也可以改成yes根据需求)
PermitRootLogin prohibit-password

改完重启SSH服务,之后就只能用密钥登录服务器,密码登录会直接被拒绝。

2.3 限制允许登录的用户

如果服务器是多用户使用,或者只有特定用户能登录SSH,可以直接限制允许登录的用户名,其他用户就算有密码也登不上。 编辑服务器的/etc/ssh/sshd_config,添加:

# 替换成你要允许的用户名,多个用空格分隔,比如AllowUsers alice bob
AllowUsers 你的用户名

2.4 配置IP白名单

如果你用的是固定IP,比如公司办公IP、家庭宽带IP(如果是固定的),可以配置IP白名单,只有指定IP能连SSH,其他人就算扫到端口也进不来。

方法1:SSH配置文件里指定IP

编辑服务器的/etc/ssh/sshd_config,修改:

# 替换成允许登录的用户和IP,比如testuser@192.168.1.100,多个用空格分隔
AllowUsers testuser@192.168.1.100

方法2:防火墙设置更灵活

如果要允许整个网段,比如192.168.1.0/24,用防火墙规则更方便:

# 先确保端口2222已经开放(之前换过端口)
sudo ufw allow from 192.168.1.0/24 to any port 2222
# 拒绝其他所有IP连SSH,最后一条规则要放在最后
sudo ufw deny 2222

2.5 开启SSH日志审计

开启详细日志后,能方便排查登录问题、追踪攻击行为,比如有没有人暴力破解你的端口。 编辑服务器的/etc/ssh/sshd_config,修改日志级别:

# 日志级别设为VERBOSE,记录详细的登录、断开信息,默认是INFO
LogLevel VERBOSE

重启SSH服务后,日志会存在/var/log/auth.log,查看SSH相关的登录记录用:

grep sshd /var/log/auth.log

应用场景与注意事项

优化技巧适合个人开发者、小团队日常开发,比如频繁用SSH部署代码、传大文件,能明显减少等待时间;安全设置适合公网服务器、项目生产环境,比如把代码部署在Ubuntu服务器上,必须做好这些配置防止被入侵。 技术优缺点方面,更换端口的优点是减少自动化扫描,缺点还是可能被针对性扫描;密钥登录的优点是绝对安全,缺点是要备份私钥、换设备要同步私钥;IP白名单的优点是防护级别高,缺点是IP变动就无法登录,适合固定IP场景。 注意事项:所有配置修改前一定要备份原文件;改完SSH配置后先测试sshd -t,没有输出才是配置正确,再重启服务,不然会连不上服务器;远程操作时先开新端口/规则,再关闭旧端口,避免被锁。

文章总结

Ubuntu系统的SSH连接优化和安全设置是日常运维、开发必备的技能,优化能提升连接和文件传输的效率,安全设置能降低服务器被攻击的风险。实际操作中要结合场景选择,内网开发的服务器可以适当放宽安全要求,只要优化速度;公网的生产服务器必须用高强度配置,比如密钥登录、IP白名单、禁用密码。不管做哪种配置,做好备份和测试是核心,避免配置错误导致无法连接服务器。