很多刚接触云服务器的新手用户,最常卡在“怎么连上去”这一步。其实只要搞清楚几个关键前提,远程连接并不难。下面我们就从实际部署角度,拆解远程登录的技术要点和准备步骤。
远程登录前,你必须确认的3个技术前提
不是买了服务器就能立刻连上,系统和网络配置缺一不可。以下条件必须全部满足,否则连接会失败。
- SSH服务端必须已安装并运行:绝大多数Linux发行版(如Ubuntu、CentOS)默认已安装OpenSSH服务端,但部分精简镜像可能未启用。可通过控制台VNC或本地终端执行
systemctl status sshd或service ssh status验证服务状态。 - 服务器防火墙需放行SSH端口:默认SSH使用22端口,但云平台通常有独立的安全组规则。即使系统防火墙(如iptables、ufw)允许,若云平台安全组未开放22端口(或你自定义的端口),外部仍无法连接。
- 拥有有效的登录凭证:可以是密码,也可以是SSH密钥对。新购服务器在创建时通常会要求设置登录密码或绑定公钥,务必妥善保存。
两种主流SSH登录方式:密码 vs 密钥
SSH支持两种身份验证机制,各有优劣,适合不同场景。
| 验证方式 | 安全性 | 使用便捷性 | 适用场景 |
|---|---|---|---|
| 密码登录 | 中等(易受暴力破解) | 高(直接输入密码即可) | 临时测试、低敏感环境 |
| 密钥登录 | 高(基于非对称加密,防中间人攻击) | 中(需提前配置密钥对) | 生产环境、长期运维、自动化脚本 |
密码登录:最直接的连接方式
如果你在创建服务器时设置了密码,可直接通过SSH客户端连接。以命令行为例,基本语法如下:
ssh 用户名@服务器公网IP -p 端口号
例如,连接IP为123.123.123.123、端口为22的Ubuntu服务器,命令为:
ssh ubuntu@123.123.123.123 -p 22
首次连接时,系统会提示确认服务器指纹(防止中间人攻击),输入“yes”后按回车,再输入密码即可登录。注意:终端输入密码时不会显示任何字符,这是正常的安全设计。
密钥登录:更安全的免密连接方案
密钥登录需要先在本地生成一对密钥(公钥+私钥),再将公钥部署到服务器。整个过程分三步:
- 本地生成密钥对:在Linux或macOS终端执行
ssh-keygen -t rsa -b 4096,Windows用户可使用PuTTYgen或Windows 10/11内置的OpenSSH客户端。生成后,默认私钥保存在~/.ssh/id_rsa,公钥在~/.ssh/id_rsa.pub。 - 将公钥上传到服务器:可通过控制台直接粘贴公钥内容到“密钥管理”或“用户数据”字段;若已能密码登录,也可用
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@IP自动部署。 - 配置SSH服务端启用密钥认证:确保服务器
/etc/ssh/sshd_config文件中包含PubkeyAuthentication yes且AuthorizedKeysFile .ssh/authorized_keys,然后重启SSH服务:sudo systemctl restart sshd。
配置完成后,再次使用 ssh 用户名@IP 即可免密登录(前提是私钥路径正确且权限为600)。
不同操作系统的SSH客户端推荐
本地操作系统不同,可用的工具也不同。以下是各平台常用且免费的客户端:
- Windows:可使用系统自带的OpenSSH客户端(Windows 10 1809+、Windows 11),或第三方工具如PuTTY、Xshell(学生版免费)。Xshell界面友好,支持多标签和会话管理,适合新手。
- macOS / Linux:终端原生支持SSH命令,无需额外安装。可直接使用
ssh、scp、ssh-keygen等命令。 - VS Code集成:通过“Remote – SSH”插件,可直接在编辑器内连接远程服务器,实现代码编辑与调试一体化,适合开发者。
常见连接失败原因及排查思路
连接不上?别急,按以下顺序排查:
- 检查公网IP是否正确:确认使用的是服务器的公网IP,而非内网IP。
- 验证安全组规则:登录云平台控制台,检查安全组是否放行了SSH端口(如22或自定义端口)的入站规则,协议为TCP,来源可设为0.0.0.0/0(测试时)或指定IP(生产环境)。
- 确认SSH服务状态:通过控制台VNC登录服务器,执行
sudo systemctl status sshd看服务是否active (running)。 - 检查用户名是否正确:不同系统默认用户名不同,如Ubuntu为
ubuntu,CentOS为centos或root(取决于镜像)。 - 测试端口连通性:在本地用
telnet IP 端口或nc -vz IP 端口测试端口是否可达。若不通,基本可判定为网络或安全组问题。
进阶场景:通过SSH隧道实现远程调试
如果你是开发者,可能需要将本地开发环境与远程服务器联动。例如,使用Xdebug调试PHP应用,可通过SSH端口转发实现:
ssh -R 9001:localhost:9001 用户名@服务器IP
该命令将服务器的9001端口反向转发到本地9001端口。当服务器上的PHP请求触发Xdebug时,调试信息会通过SSH隧道传回本地IDE(如VS Code),实现断点调试。这要求服务器 sshd_config 中启用 GatewayPorts yes 和 AllowTcpForwarding yes。
常见问题解答(FAQ)
| 问题 | 解答 |
|---|---|
| SSH连接时提示“Connection refused”怎么办? | 通常表示目标端口未开放或SSH服务未运行。请检查安全组规则和服务器SSH服务状态。 |
| 能ping通IP但SSH连不上,为什么? | ping使用ICMP协议,SSH使用TCP。可能安全组放行了ICMP但未放行TCP 22端口,需单独检查端口规则。 |
| 密钥登录时提示“Permission denied (publickey)”? | 可能原因:公钥未正确放入 ~/.ssh/authorized_keys;文件权限错误(目录应为700,文件为600);SSH服务未启用密钥认证。 |
| Windows下如何用命令行生成SSH密钥? | 在PowerShell中执行 ssh-keygen -t rsa -b 4096,按提示操作即可。密钥默认保存在 C:Users用户名.ssh。 |
| 修改了SSH端口后连不上,如何恢复? | 可通过云平台提供的VNC控制台登录服务器,检查 /etc/ssh/sshd_config 配置是否正确,并确保新端口已在安全组放行。 |