获取一台全新的 Linux VPS 后,通过 SSH(Secure Shell)建立加密终端连接是所有运维工作的起点。许多初学者在第一次尝试连接时频繁遭遇超时或拒绝,核心原因往往是对服务商交付的参数机制缺乏理解,或是混淆了控制面板层与系统层之间的凭据。
本文将梳理首次 SSH 登录所需的四项核心要素,对比主流服务商(如 BandwagonHost 与 DMIT)在默认端口与初始凭据交付上的策略差异,详解主机指纹的安全验证逻辑,并提供排障与首登验证指南。
1. 梳理连接四要素:地址、端口、用户与凭据#
在本地终端发起连接之前,必须准确收集以下四项网络与认证参数:
| 要素 | 说明 | 常见取值与服务商差异 |
|---|---|---|
| IP 地址 | 服务器的公网 IPv4 地址 | 在服务商实例详情面板获取。若采用双栈网络,也可使用分配的 IPv6 地址。 |
| SSH 端口 | SSH 守护进程(sshd)监听的网络端口 | Linux 标准默认为 22。但 BandwagonHost(搬瓦工) 系统模板在交付时通常会分配一个五位数的随机高端口(如 28412),必须在 KiwiVM 控制面板中精确查阅;而 DMIT 的大部分官方模板默认维持标准的 22 端口。 |
| 登录用户名 | 远程系统内部的账户名称 | 全新服务器初始化时通常为最高管理员账户 root。部分定制化发行版(如 Debian/Ubuntu 云镜像)可能默认预置 debian 或 ubuntu 用户。 |
| 认证凭据 | 证明客户端身份的密钥或口令 | SSH 密码或客户端对应的 SSH 私钥文件。 |
关键概念:三层凭据隔离#
初次管理云服务器时,务必明确以下三组账号密码处于不同的信任层级,不能互相混用:
- 客户中心账号(Billing/Client Portal):用于登录服务商官网、支付账单、提交工单及增退订服务。
- 实例管理面板密码(如 BandwagonHost KiwiVM):针对底层虚拟化环境的独立控制台密码,用于开机、关机、挂载 ISO 及重启系统。
- 系统操作系统密码(OS root Password):运行在 VPS 内部 Linux 系统的超级管理员密码,仅在系统运行时有效。
2. 初始认证差异:密码直连与 SSH 密钥管理#
不同的服务商在实例交付的安全策略上存在明显分歧,直接决定了首次登录的准备步骤。
模式 A:密码直连模式(以 BandwagonHost 为例)#
BandwagonHost 的系统镜像普遍允许 root 密码直接登录:
- 购买并开通实例后,初始 root 密码通常由系统随机生成并发送至注册邮箱,或直接显示在 KiwiVM 管理面板的初始信息中。
- 若遗忘初始密码,无需重置官网账户,直接登录 KiwiVM 面板选择 Root password modification 即可在底层重置。
- 端口注意:连接时切勿遗漏 KiwiVM 面板首页标注的 SSH Port,若盲目指定 22 端口,连接请求将直接超时。
模式 B:密钥优先模式(以 DMIT 为例)#
DMIT 在安全规范上更为严格,其大多数 Linux 镜像在交付时默认关闭了远程 root 密码认证,强制要求采用公钥认证:
- 创建阶段注入:在订购或安装系统时,用户需在面板的 SSH Keys 资产库中绑定本地的 SSH 公钥。部署程序会自动将该公钥写入系统
/root/.ssh/authorized_keys。 - 凭据修改的生效机制:若后续在 DMIT 实例控制面板的 Access 选项卡中重置了 root 密码或更换了 SSH 密钥,面板只是向元数据写入了配置。必须依据面板提示主动重启(Restart)实例,底层脚本才能在引导时重新生成系统凭据。
- 私钥权限要求:使用私钥登录时,本地存放私钥文件的权限必须严格限制。在 macOS 或 Linux 本地终端中,若私钥权限过大(如
644),SSH 客户端会主动拒绝加载该密钥。连接前需执行:
chmod 600 ~/.ssh/id_ed255193. 发起连接:命令行终端与图形客户端实操#
收集齐 IP、端口、用户及凭据后,即可在本地设备发起连接。无需第三方工具,主流操作系统(Windows 10/11 的 PowerShell / Windows Terminal、macOS 的 Terminal、各类 Linux 桌面)均内置了 OpenSSH 客户端。
命令行(OpenSSH)标准调用#
打开本地终端,依据认证方式选择对应命令(请将命令中的参数替换为实际值):
使用密码认证(常见于 BandwagonHost 的非标高端口):#
ssh -p 28412 [email protected]-p <端口>:指定连接的目标端口。若使用标准 22 端口,可省略该参数;使用非标端口时必须显式声明。- 输入密码时,终端为了防窥探完全不会显示任何字符或星号占位符。直接输入完整密码或从剪贴板粘贴一次后敲击回车即可,切勿以为终端卡死而连续重复粘贴。
使用私钥认证(常见于 DMIT 实例):#
ssh -i ~/.ssh/id_ed25519 -p 22 [email protected]-i <私钥路径>:显式指定本地匹配的私钥文件绝对或相对路径。
图形客户端配置要点#
若偏好使用 Termius、Xshell 或 PuTTY 等图形化管理工具,核心字段对应关系如下:
- Host / Server IP:填入实例的公网 IPv4 地址,前后不要包含空格或
http://等协议头。 - Port:填入对应的 SSH 端口(标准 22 或服务商分配的随机高端口)。
- Username:输入
root。 - Authentication Method:
- 密码方式选择 Password。
- 密钥方式选择 Public Key / Key Pair,并浏览导入本地持有的私钥文件(PuTTY 需使用
.ppk格式,可通过 PuTTYgen 转换 OpenSSH 密钥)。
4. 首次连接的核心安全屏障:主机指纹验证#
当你第一次向目标服务器发起 SSH 连接时,终端必定会中断连接流程,并弹出如下安全交互提示:
The authenticity of host '[203.0.113.50]:28412 ([203.0.113.50]:28412)' can't be established.
ED25519 key fingerprint is SHA256:4t7XnO2Lz9yG7hQ8kF3mP1uW6vY0rE9bS5aD3cZ1xIo.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?为什么必须核对指纹?#
SSH 协议采用 TOFU(Trust On First Use,首次使用信任) 模型。第一次连接时,本地客户端与目标服务器之间尚未建立任何信任背书。服务器会将其持有的公钥哈希(即指纹)发送给本地,询问你是否确信该公钥属于你购买的真实 VPS。
如果盲目键入 yes,在极端网络环境下(如本地公共 Wi-Fi 遭受 ARP 欺骗或 DNS 劫持),流量可能已经被重定向至攻击者的伪造机器,输入的密码将被实时截获。
如何科学核验真实指纹?#
最规范的核验方式是在未接入公网 SSH 之前,通过服务商提供的带外管理控制台在服务器内部自行计算公钥哈希,与本地终端弹出的指纹进行比对:
- 进入带外控制台:
- BandwagonHost:登录 KiwiVM 面板,找到左侧菜单中的 Interactive Console 或 Root shell-interactive。
- DMIT:登录服务商控制面板,进入实例详情页,打开 Console(VNC 紧急控制台)。
- 在控制台中执行指纹生成命令:(若本地提示的是 RSA 或 ECDSA 算法,将文件名相应替换为
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pubssh_host_rsa_key.pub或ssh_host_ecdsa_key.pub) - 比对并确认:
控制台输出的 SHA256 哈希字符串若与本地终端弹出的指纹完全一致,即可放心地在本地终端输入
yes并敲击回车。
一旦确立信任,本地 OpenSSH 客户端会自动将目标主机的 IP、端口和公钥记录在本地用户目录的 ~/.ssh/known_hosts 文件中。后续再次连接该服务器时,客户端将静默校验,不再重复弹窗提示。
5. 首登验证:四项基准只读巡检#
连接成功并看到 Linux 命令提示符(通常形如 root@hostname:~#)后,切忌立即盲目执行改端口、禁用密码等高危安全操作。首先应执行四条只读命令,核实基础软硬件环境与网络分配情况:
whoami
hostnamectl
ip -4 addr show
uptimewhoami:确认当前终端处于root超级用户上下文,具备系统维护权限。hostnamectl:核验操作系统发行版大版本(如 Debian 12、Ubuntu 24.04 LTS)、内核版本及底层架构(x86_64 或 aarch64),确保安装的系统与采购预期相符。ip -4 addr show:检查网卡绑定的内网与公网 IPv4 地址,确认网络接口已正常获取租约,且分配的 IP 与面板显示的公网 IP 准确映射。uptime:观察系统运行时间与平均负载(Load Average),确认这是一台刚初始化的新环境,未发生异常的后台死锁或频繁崩溃重启。
巡检完毕后,若需临时断开会话,输入 exit 或按下快捷键 Ctrl + D 即可安全登出。
运维安全底线:在完成后续的修改 SSH 端口、绑定普通用户 sudo 权限或停用密码登录等加固操作时,务必保持当前已经连接成功的终端窗口不关闭。另起一个新的本地终端窗口测试连接,确保新规则完全生效且能正常登入后,才可关闭初始维护会话。
6. 首登常见报错与决策处理#
首次登录如果遭遇阻碍,通常可通过客户端输出的报错信息快速定位瓶颈所在:
首次连接故障排查
├── Connection timed out ──> 网络阻断 / 端口填错(如搬瓦工填了默认 22) / 路由异常
├── Connection refused ────> 服务未监听该端口 / 防火墙 DROP / 系统未开机
├── Permission denied ─────> 密码错 / 密钥不匹配 / 镜像禁用了密码直登(如 DMIT)
└── HOST IDENTIFICATION ───> 系统重装导致指纹变动 / IP 冲突,需针对性清理旧指纹1. Connection timed out(连接超时)#
- 现象:终端光标悬停数十秒后报错退出。
- 根因:数据包未能抵达目标主机,或沿途防火墙丢弃了握手报文。
- 排查路径:
- 核对端口是否填错。特别是 BandwagonHost 用户,核验是否将 KiwiVM 中的高端口误敲成了
22。 - 登录服务商面板,确认实例当前处于 Running(运行中) 状态,而非挂起或关机。
- 若 IP 处于异常路由状态,可利用服务商面板的停机迁移(Migration)或更换 IP 功能(注意:IP 处于黑名单时,服务商的跨数据中心迁移策略通常会受到限制)。
- 核对端口是否填错。特别是 BandwagonHost 用户,核验是否将 KiwiVM 中的高端口误敲成了
2. Connection refused(连接被拒绝)#
- 现象:指令执行后瞬间返回
ssh: connect to host ... port ...: Connection refused。 - 根因:目标服务器在线且网络可达,但目标端口上没有任何程序在监听,或者本地防火墙规则(如 iptables/nftables)重置拒绝了该连接。
- 排查路径:
- 通过 KiwiVM 或 DMIT 的 Web Console 进入系统。
- 执行
ss -tulpn | grep ssh确认 SSH 守护进程当前实际绑定的端口号。
3. Permission denied (publickey, password)#
- 现象:输入密码后报错,或者甚至未提示输入密码便直接中断。
- 根因:认证策略不被目标服务器接受。
- 排查路径:
- 在 DMIT 镜像上极易发生:系统默认禁用了密码登录,此时若未使用
-i指定私钥,服务器会直接以Permission denied (publickey)拒绝。 - 若已指定私钥依然被拒,核对当前使用的私钥是否与在面板后台绑定的公钥成对匹配。若在面板 Access 重新配置了密钥,确认实例是否已经执行过硬重启以载入配置。
- 在 DMIT 镜像上极易发生:系统默认禁用了密码登录,此时若未使用
4. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!#
- 现象:终端打印大面积警告红字,提示远程主机身份已改变,连接被强行终止。
- 根因:该 IP 之前曾被其他实例使用过,或者你刚刚在服务商面板中执行了重装系统(OS Reinstall)。重装会导致服务器内部重新生成全新的主机私钥,进而使指纹与本地
~/.ssh/known_hosts中保存的旧记录冲突。 - 正确处理方法:
切勿盲目清空整个
known_hosts文件,这会破坏其他存量服务器的安全信任锚点。使用内置工具针对特定目标记录进行定向清理:清理成功后,重新发起连接,核对新指纹并确认写入即可恢复正常访问。# 针对标准 22 端口 ssh-keygen -R 203.0.113.50 # 针对非标高端口(如 BandwagonHost 的 28412) ssh-keygen -R "[203.0.113.50]:28412"