JOURNAL / WORDS & IDEAS

MobaXterm 连接 GCP 与 SSH 端口调整

记录 GCP SSH 身份配置、防火墙规则与端口迁移的核验步骤。

阅读设置

一、 首次连接 (密钥配置)

1. 生成密钥 (本地电脑)

  • 打开 MobaXterm > Tools > MobaKeyGen。
  • 点击 Generate (移动鼠标生成随机数)。
  • Key comment: 填入自定义用户名 (如 admin) -> 这也是你登录服务器的用户名。
  • Save private key: 保存 .ppk 文件到安全位置。
  • 复制上方框内的 Public key。

2. 添加公钥 (GCP 控制台)

  • 进入 GCP > Compute Engine > VM 实例 > 编辑实例。
  • 找到 SSH 密钥 > 添加条目 > 粘贴公钥。
  • 保存后,GCP 会自动创建对应的 Linux 用户。

3. 建立连接 (MobaXterm)

  • Session > SSH。
  • Remote host: 填入 GCP 外部 IP。
  • Username: 填入 Key comment 设置的用户名。
  • Advanced SSH settings: 勾选 Use private key,选择 .ppk 文件。

二、 修改 SSH 端口 (安全加固)

假设将默认端口 22 修改为 2222。

1. 修改系统配置

## 备份配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

## 编辑配置
sudo nano /etc/ssh/sshd_config
## 找到 Port 22,改为 Port 2222 (或新增一行 Port 2222)
## Ctrl+O 保存,Ctrl+X 退出

2. 放行防火墙 (两道门都要开)

  • 内部防火墙 (UFW):
sudo ufw allow 2222/tcp
## 如果还没启用防火墙,记得先允许 SSH 再 enable
## sudo ufw enable

  • 外部防火墙 (GCP VPC):
  • GCP 控制台 > VPC 网络 > 防火墙 > 创建防火墙规则。
  • 目标:网络中的所有实例 (或指定标签)。
  • 来源 IP:0.0.0.0/0。
  • 协议端口:tcp: 2222。

3. 解决 Ubuntu 新版本 Socket 冲突 (关键步骤)

适用于 Ubuntu 22.10+ 等使用 systemd socket 托管 SSH 的系统。如果不做这一步,端口设置不生效。

## 停止 socket 监听 (解除 systemd 对 22 端口的强占)
sudo systemctl stop ssh.socket
sudo systemctl disable ssh.socket

## 重启 SSH 服务 (让其读取配置文件)
sudo systemctl restart ssh


三、 常用排查命令

1. 查看端口监听状态 判断 SSH 到底跑在哪个端口,以及是否被 Systemd 劫持。

sudo ss -tulpn | grep ssh
## 正确状态:端口显示 2222,users 只有 sshd
## 错误状态:端口显示 22,users 包含 systemd

2. 查看内部防火墙状态

sudo ufw status

3. 本地回环测试 在不关闭旧窗口的情况下,测试新端口是否通畅。

ssh -p 2222 localhost


⚠️ 核心避坑指南

  1. 不要关闭旧窗口: 在确认新端口(2222)能从外部成功连接之前,永远保持一个旧端口(22)的连接窗口开启。
  2. GCP 防火墙是隐形的墙: 很多人改了服务器内部配置,却忘了 GCP 网页控制台还需要单独开防火墙。
  3. Root 权限: GCP 默认不能直接 Root 登录,必须用普通用户登录后执行 sudo su 切换。

接下来你可以: 把旧的 22 端口规则从 UFW 和 GCP 防火墙中删除,彻底完成安全加固。

版本与回退

先区分 GCP OS Login 与元数据 SSH 密钥。修改端口前保留旧会话,检查 sshd -t、实际监听端口和安全组;Ubuntu 某些配置由 ssh.socket 管理,不能仅重启 ssh.service 就认定已切换。新端口验证成功后再移除旧规则。