不要再使用下面的命令更换SSH端口了
sudo vim /etc/ssh/sshd_configUbuntu 目前已经在20.10及以后的版本默认启用`systemd socket`机制,`ssh.socket`会提前监听 SSH 端口,即使改了`sshd_config`,它仍会完全覆盖`sshd_config`的端口配置。
在更改端口之前,务必先在防火墙中允许新端口通过,否则你可能会被锁在服务器外面。
如果你使用的是 UFW 防火墙,请运行:
sudo ufw allow 8888/tcp
sudo ufw reload使用 systemctl edit命令来创建一个覆盖默认配置的 drop-in 文件:
sudo systemctl edit ssh.socket这会打开一个文本编辑器。在顶部的空白区域(位于 ### Lines below this comment will be discarded 注释之上),添加以下内容:
[Socket]
ListenStream=
ListenStream=0.0.0.0:8888
ListenStream=[::]:8888原理解释:第一行空的ListenStream=是必须的,它用于清除系统默认的 22 端口配置。第二行 则是绑定新端口。如果不加第一行,SSH 将同时监听 22 和 8888 端口。
保存并退出编辑器(Ctrl+O 保存,Enter 确认,Ctrl+X 退出)。
应用刚刚的修改:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket可以通过以下命令检查 socket 是否已经在监听新端口:
sudo systemctl status ssh.socket在输出信息中,你应该能看到 Listen: [::]:8888(Stream) 类似字样。
⚠️ 警告:请千万不要关闭当前的 SSH 终端窗口!
打开一个全新的终端窗口,尝试使用新端口连接你的服务器
如果你的新端口测试连接完全正常,你可以回到旧终端,将防火墙中原本的 22 端口关闭,以提高安全性:
sudo ufw delete allow 22/tcp
sudo ufw reload如果是阿里云/腾讯云,需要在安全组放行相应端口
在iptables检查底层防火墙