GCP充值 GCP谷歌云修改SSH端口
前言:为什么要改SSH端口?
很多人第一次接触服务器时,都会自然地把“安全”想得像“装个门锁”那么简单:锁住就行。然后很快你会发现,互联网这张大网并不在意你“锁得多用心”,它更在意你的门有没有按时关、钥匙孔有没有对着全世界。
SSH(默认22端口)就是典型的“钥匙孔位置默认写死”。改SSH端口,并不能从根本上替代密钥登录、最小权限、防火墙、Fail2ban之类的安全措施,但它确实能降低大量低成本扫描的噪声,顺便让脚本扫不到你(至少不会那么轻松)。
在 GCP(Google Cloud Platform)上改SSH端口,核心并不复杂:你需要同时完成两件事——系统里让sshd监听新端口,以及在 GCP 防火墙里放行新端口。缺一不可,否则你改了也等于“人在办公室把门改成了新号码,但快递公司还按旧号码来送”。
下面我们就按“能跑起来”为目标,一步步来。
\n\n先确认你的环境:你改的到底是哪种SSH?
在GCP上,SSH常见有三种“触点”:
1)你用浏览器/控制台点“SSH”按钮登录
GCP控制台的SSH按钮通常会用它自己的方式建立连接,有时会与本机端口设置有差异。为了避免“你在服务器改了端口,但控制台仍然按旧逻辑连”,建议你改端口后优先用“本地ssh”连接,或确保你的连接方式与端口一致。
2)你从本地电脑用 ssh 命令连
这种最直观。你改多少端口,本地命令就得跟着改。
3)你有外部转发/代理/跳板机
如果你中间还有负载均衡、堡垒机、VPN设备,那么端口可能还要在链路上对应调整。
本文以最常见的场景为主:直接对GCE虚拟机的系统sshd进行端口修改,并通过 GCP防火墙规则开放端口。
\n\nGCP里改SSH端口的总体流程
把事情拆开做,你会更不容易翻车:
- 选一个新端口(例如 2222),避免使用过于“热门”的端口。
- 在虚拟机内部修改 /etc/ssh/sshd_config,把 sshd 监听端口从22改为新端口。
- 重载/重启 sshd 服务,确保监听成功。
- 在 GCP 控制台创建或修改防火墙规则,放行新端口(来源IP按需限制)。
- 在本地用 ssh -p 新端口 验证登录。
- 确认没有残留旧规则、没有让自己“锁在门外”。
听起来像“改配置+开端口+测试”。是的,真正难的不是操作步骤,而是顺序和验证:你要确保新端口先能连上,而不是先改完系统再发现防火墙还没放行。
\n\n步骤一:选择新端口
选择一个非22端口很容易,但我建议你考虑两点:
- 尽量避免常见服务端口:比如 80/443、3306、5432等。
- 避免端口冲突:在虚拟机上确保该端口未被其他服务占用。
例如你可以选择 2222。别太迷信“越高越安全”,端口只是降噪,不是魔法。
\n\n步骤二:在虚拟机内修改 sshd 配置
登录到虚拟机(最好是你仍然能用旧端口22进入的情况下进行)。然后编辑 sshd 配置文件。
常见路径通常是:
- Debian/Ubuntu:
/etc/ssh/sshd_config - CentOS/RHEL:
/etc/ssh/sshd_config或类似路径
用文本编辑器打开,比如:
sudo nano /etc/ssh/sshd_config
在文件里找到以 Port 开头的行。典型情况可能是:
#Port 22(被注释)Port 22(明确写死)
你需要把它改成:
Port 2222
注意几件小事:
- 如果文件里有多处Port配置,以最终生效的为准。建议只保留一条明确的Port行,避免“改了半天却发现另一个地方又覆盖了”。
- 确保没有其它相关限制比如
Match段里对端口有特殊配置。大多数情况下不需要管,但如果你之前做过定制,别当它不存在。
顺手检查:是否允许密码登录(安全建议)
GCP充值 改端口只是第一步。你可以顺手把 SSH 安全性也加固一下,比如确保密钥登录开启,密码登录关闭(视你的实际需求)。
在 sshd_config 里你可能会看到:
PasswordAuthentication yes
如果你想更安全,可以改成:
PasswordAuthentication no
如果你不确定,建议至少保持现状先把端口改通,再决定后续安全策略。毕竟“安全”不是为了更快失败。
\n\n步骤三:重载或重启 sshd 服务
改完配置后,必须让 sshd 重新读取配置,否则你改了也只是“写在纸上”。
常见命令:
- Ubuntu/Debian:
sudo systemctl reload ssh或sudo systemctl restart ssh - CentOS/RHEL:
sudo systemctl restart sshd
更稳妥的方式是先用 restart(虽然停顿一小会儿,但可控)。例如:
sudo systemctl restart sshd
然后检查 sshd 是否在监听新端口:
sudo ss -ltnp | grep 2222
如果你看到类似输出,说明监听成功。你也可以进一步确认进程确实是 sshd:
sudo lsof -iTCP:2222 -sTCP:LISTEN
如果这里没有监听,别急着去改GCP防火墙。先把“服务器端活没活”确认了。
\n\n步骤四:GCP 防火墙放行新端口(重点!)
很多人会在这里“翻车”。原因通常是:你在虚拟机里把sshd改到了2222,但在GCP的防火墙里仍然只放行了22。结果就是:外面连不进来,服务器里面看起来也一切正常——你会非常怀疑人生。
所以顺序很关键:防火墙放行新端口。
\n\n查看当前防火墙规则
在 GCP 控制台中进入:
- VPC 网络(VPC network)
- 防火墙(Firewall)
找到与你的实例相关的规则。很多项目会有默认的“允许SSH(22)”规则。
\n\n新增或修改允许规则
你需要新增一个规则,允许入站到 2222 端口。
关键参数建议这样设:
- 方向(Direction):Ingress(入站)
- 目标(Targets):可以选择“网络标记(target tags)”或“服务账号/实例”。如果你不确定,选与你实例匹配的方式。
- 协议和端口(Protocols and ports):选择 TCP,然后输入 2222
- 源过滤(Source IP ranges):强烈建议限制到你的公网IP/办公网段,例如
x.x.x.x/32或你的VPN网段。
为什么要限制来源?因为你现在改变了端口,不代表你把攻击面关闭了。你只是把“门牌号”从22换成了2222。如果还对全世界开放,依然有人会试探。
\n\n如果你想保留22端口怎么办?
有些人会改到新端口后,短时间内保留22,方便回退或排障。注意:这意味着 22 仍然可能被连入(前提是防火墙放行了22)。如果你计划最终完全关闭22,就要在验证新端口稳定后,逐步移除或收紧22的规则。
\n\n步骤五:验证连接(先本地测,别用直觉)
当你完成服务器端监听、以及GCP放行新端口后,就该用本地验证。
假设你的虚拟机公网IP或域名是 YOUR_IP,新端口是 2222,用户名是 youruser,那么命令应类似:
ssh -p 2222 youruser@YOUR_IP
如果你用的是私钥:
ssh -i /path/to/key -p 2222 youruser@YOUR_IP
验证应关注几件事:
- GCP充值 是否连得上:没有超时、没有“connection refused”。
- 是否能正常认证:不会卡在“Permission denied”。
- 日志是否正常:如果失败,先看服务器日志。
服务器端查看SSH日志(排障利器)
常见命令:
- Ubuntu/Debian:
sudo journalctl -u ssh --since "10 minutes ago" - CentOS/RHEL:
sudo journalctl -u sshd --since "10 minutes ago"
你也可以查看是否有监听端口错误或配置语法问题。
\n\n常见问题与踩坑清单
下面这些坑非常常见,我把它们写在前面,省得你“改完才发现不对”。
\n\n坑1:只改了sshd_config,没有在GCP防火墙放行
表现:本地连接超时,或者一直握手失败。服务器日志可能没什么异常,因为连接根本没到达。
GCP充值 解决:新增/修改防火墙规则,放行 2222。
\n\n坑2:改了端口,但你用的是控制台“SSH按钮”
表现:控制台仍旧尝试走22,导致连不上。
解决:用本地 ssh 指定端口,或者确认控制台是否有端口自定义(不同GCP工作流可能不同)。最稳的是:自己用 ssh -p 新端口 验证。
\n\n坑3:sshd配置语法错误,导致重启后服务没起来
表现:你重启sshd后,端口不监听,连接失败。
解决:重启前先检查配置语法:
GCP充值 sudo sshd -t
如果返回错误信息,就按提示修正。
\n\n坑4:端口被其他服务占用
表现:改完后发现监听失败或端口被占用。
解决:检查占用者,例如:
sudo ss -ltnp | grep 2222
如果已经有进程占用,换端口或停止冲突服务。
\n\n坑5:忘了收紧22端口,结果22还在放行
表现:你以为已经“改掉了22”,但外部扫描仍能探测到22。
解决:在验证新端口通畅后,移除/收紧22对应防火墙规则。
\n\n最佳实践:不仅改端口,还要把安全做扎实
如果你只是改端口,安全确实会提升一点点,但也别把它当“终点”。我建议你至少再做三件事,性价比非常高:
- 仅允许你的公网IP访问SSH:Source IP ranges 尽量缩小。
- 尽量使用密钥登录,关闭密码登录(可选,但推荐)。
- 使用fail2ban或类似策略:防止暴力破解即使换端口也继续发生。
另外,如果你运维频繁,考虑使用堡垒机/Identity-Aware Proxy/Private Service Connect等更体系化的方式。但那是更高级的题,今天先把“端口改通”这个基础功练好。
\n\n回滚方案:如果你不小心把自己锁外面怎么办?
这是每个改端口的人都要面对的恐惧:万一没连上,我怎么进去改回来?
实践建议:
- 在修改前,尽量确保你当前连接是稳定的,并且准备好你可以通过控制台(或GCE的串行控制台/救援方式)进入。
- 如果你的账号有足够权限,GCP控制台通常还能提供某种形式的访问能力,例如临时重新配置或使用系统修复通道。
- 如果你有“自动化部署/配置管理”(例如脚本、Ansible),更能降低人工操作风险。
具体“救援通道”在不同项目和权限配置下会不一样,所以不要指望我在这里一句话就替你“保证能进”。但至少你要记住:把变更做成可回滚。
\n\n一个推荐的执行顺序(你照着做就行)
为了让你少走弯路,我把顺序整理成“照做版”:
- 选定新端口(如2222)。
- 在虚拟机上修改
/etc/ssh/sshd_config,把Port 22改为Port 2222。 - 执行
sudo sshd -t检查配置语法。 - 重启 sshd:
sudo systemctl restart sshd(或sudo systemctl restart ssh)。 - 检查监听:
sudo ss -ltnp | grep 2222。 - 在 GCP 防火墙新增允许 2222 入站规则,source范围限制到你的IP。
- 本地执行
ssh -p 2222 user@YOUR_IP验证。 - 确认无误后,再考虑删除/收紧原22的防火墙规则。
注意:你不需要“先删22再连新端口”。那是爽文式操作,真实世界不建议。
\n\n结语:改端口只是开始,稳定才是王道
GCP上修改SSH端口,本质就是两边同时配合:服务器端监听要改,网络侧防火墙要放行。当你把这两件事都做对,并通过ssh -p新端口验证成功,你就完成了一个很实用的小安全升级。
最后送你一句“运维格言”(虽然听起来像段子,但很真实):
改配置前先想好回滚;连不上时先怀疑网络再怀疑自己;当你发现问题时,通常不是“没有修复”,而是“修复了但另一边没跟上”。
愿你这次改端口,既快又稳,不用靠“开着控制台祈祷”。
" }

