详解如何 SSH 远程登录自己的 Linux 服务器
本文最后更新于 2026年6月27日 晚上

买了云服务器,第一件事通常不是装网站、跑 Docker、配 Nginx,而是:先登录进去。
Linux 服务器大多数时候没有图形界面,我们不会像 Windows 远程桌面那样点来点去,而是通过 SSH 进入服务器的命令行。只要 SSH 连上了,后面的软件安装、网站部署、日志查看、文件编辑、权限配置,才真正开始。
这篇文章会从小白视角(主要是为我其他文章当作基建,避免频繁一遍一遍回答基础 SSH 问题),把 SSH 登录 Linux 服务器这件事完整讲一遍:
- SSH 是什么,客户端和服务端分别在哪。
- Windows、macOS、Linux 分别用什么工具连接。
- 如何用账号密码登录。
- 如何用密钥登录,为什么更推荐密钥登录。
- 如何使用
ssh-copy-id、authorized_keys和云厂商控制台部署公钥。 - 如何写
~/.ssh/config,把很长的 SSH 命令变短。 - 登录失败时怎么排查。
- 登录成功后,应该做哪些基础安全加固。
为什么用 SSH
现在个人服务器、轻量应用服务器、VPS、树莓派、NAS、Linux 虚拟机,绝大多数都通过 SSH 远程管理。
SSH 的全称是 Secure Shell。简单理解,它是一个安全的远程命令行协议:本地电脑作为 SSH 客户端,连接远程 Linux 服务器上的 SSH 服务端,然后在加密通道里执行命令。
flowchart LR
A[本地电脑<br>SSH 客户端] -->|发起连接| B[公网或局域网]
B --> C[Linux 服务器<br>SSH 服务端]
C -->|身份验证通过| D[进入远程 Shell]
D --> E[执行命令<br>安装软件 / 查看日志 / 部署服务]
需要先纠正一个旧说法:SSH 不是“基于 SSL 的远程登录”。SSH 和 TLS/SSL 都会使用加密算法,但它们是不同的协议体系。我们日常使用的 ssh、sshd、ssh-keygen,通常来自 OpenSSH。
SSH 登录服务器,可以粗略分成两类:
| 登录方式 | 适合谁 | 优点 | 注意点 |
|---|---|---|---|
| 密码登录 | 第一次入门、临时登录 | 理解成本低,只需要用户名、服务器 IP、密码 | 容易被暴力破解,正式使用不建议长期开放 |
| 密钥登录 | 长期管理服务器 | 安全性更高,也更方便自动化 | 需要保管好私钥,公钥要放到服务器 |
我个人建议:新手可以先学密码登录,把流程跑通;真正长期使用时,尽快切换到密钥登录,并关闭密码登录。
有一定能力以后,可以上密码管理器来托管密钥,比如:
视频教程
和以前一样,我们觉得有用、有必要录个视频的内容,我们还是会花时间做个视频。不过考虑到文章是 21 年的,旧版视频仍可作为参考,具体命令和安全建议以本文更新后的内容为准:
感觉有用,可以给视频投个币么?( ´▽`):视频原链接:https://www.bilibili.com/video/BV1cL411w7RB
另外,接受打赏和捐赠嗷:爱发电:Mintimate
支持创作
制作教程不易,如果热心的小伙伴,想支持创作,可以加入我们的电圈(还可以解锁远程协助、好友位😃):
- Mintimate的电圈: https://ifdian.net/a/mintimate
- Mintimate的微信赞赏码 👉 如果认为本教程对你很有帮助,可以请我喝咖啡 ☕
志同道合的小伙伴也是知音难觅。
- 开发者爱好群: 👉 如果你对云服务器、CDN、云数据库和Linux等云计算感兴趣,亦或者喜欢编程、设计、产品、运营等领域,欢迎加入我们的开发者爱好群,一起交流学习(目前可能就我一个人?🤔,毕竟才刚刚创建~)。
当然,也欢迎在B站、YouTube或微信公众号上关注我们:
- Bilibili: https://space.bilibili.com/355567627
- YouTube: https://www.youtube.com/@mintimate/featured
- 微信公众号: MintimateBlog
更多:
如果你也想使用腾讯云的轻量应用服务器 Linux 云服务器;那么你可以使用博客的专属链接购买体验:
准备信息
开始之前,你至少要知道这几样东西:
- 服务器公网 IP,或者已经解析到服务器的域名。
- 登录用户名,比如
root、ubuntu、admin、debian、lighthouse。 - 登录方式,是密码登录,还是密钥登录。
- SSH 端口,默认是
22。 - 云服务器安全组或防火墙是否放行了 SSH 端口。
不同系统和云厂商的默认用户可能不同:
| 系统或镜像 | 常见默认用户 |
|---|---|
| Debian | root 或 admin,看云厂商镜像 |
| Ubuntu | 常见为 ubuntu,很多云镜像默认不允许 root 直接登录 |
| CentOS / Rocky / AlmaLinux | 常见为 root、centos、rocky、almalinux |
| Amazon Linux | 常见为 ec2-user |
| 腾讯云 Lighthouse 部分镜像 | 可能是 lighthouse |
| 树莓派旧版系统 | 旧版常见 pi,新版通常需要初始化时自行创建用户 |
如果你不确定用户名,优先看云厂商控制台的“登录说明”“重置密码”“密钥对”“远程登录”页面。不要急着乱试,SSH 连续失败太多次,有些服务器会被安全软件临时封禁 IP。
客户端推荐
现在 SSH 客户端已经很普及,不一定要下载第三方工具。
Windows
Windows 10 和 Windows 11 通常已经内置 OpenSSH 客户端,可以直接打开:
- Windows Terminal
- PowerShell
- 命令提示符
检查本机是否有 SSH:
1 | |
如果系统提示找不到 ssh,可以在 Windows 设置里安装“OpenSSH 客户端”,或者使用 Windows Terminal、PuTTY、Termius 等工具。

macOS
macOS 自带 Terminal 和 OpenSSH,打开“终端”即可:
1 | |

如果你喜欢更强的终端体验,也可以使用 iTerm2。
Linux
Linux 桌面发行版一般自带 SSH 客户端:
1 | |
如果没有,可以使用软件包管理器安装:
1 | |
手机和平板
移动端也可以 SSH,但我更建议把它当作临时救急工具:
- Android:Termius、JuiceSSH
- iOS / iPadOS:Termius、ServerCat、Blink Shell
如果你要长期管理服务器,还是建议在电脑上配置好密钥、SSH Config 和备份。
SSH 登录流程
从新手角度看,SSH 登录其实就是四步:
sequenceDiagram
actor U as 用户
participant C as 本地 SSH 客户端
participant S as 服务器 SSH 服务端
participant Shell as 远程 Shell
U->>C: 输入 ssh 用户名@服务器IP
C->>S: 连接服务器的 22 端口
S-->>C: 返回服务器主机指纹
U->>C: 首次连接输入 yes 信任指纹
C->>S: 提交密码或密钥签名
S-->>C: 验证身份
S->>Shell: 创建登录会话
Shell-->>U: 进入服务器命令行
第一次连接一台新服务器时,通常会看到类似提示:
1 | |
这是 SSH 在询问:你是否信任这台服务器的主机指纹。第一次连接自己的新服务器,确认 IP 没填错后,输入:
1 | |
之后本机会把这台服务器的主机指纹记录到 known_hosts 文件里。下次再连同一台服务器,如果指纹突然变化,SSH 就会提醒你可能连错服务器,或者服务器被重装了。
密码登录
密码登录最直观,格式是:
1 | |
比如服务器 IP 是 192.168.3.241,登录用户是 root:
1 | |
如果服务器 SSH 端口不是默认的 22,比如改成了 2222:
1 | |
注意:-p 是小写,表示 port。
云服务器重置密码
如果你买的是云服务器,第一次登录前通常需要在控制台设置或重置密码。

云厂商控制台重置密码后,服务器可能会自动重启。等服务器状态恢复“运行中”以后,再尝试 SSH 登录。
登录时输入密码不会显示星号,也不会显示光标变化,这是正常的。你只需要盲输密码,然后回车。

服务器允许密码登录
如果你确定密码正确,但 SSH 一直拒绝密码登录,可能是服务器禁用了密码登录。
SSH 服务端配置文件通常是:
1 | |
编辑它:
1 | |
找到或添加:
1 | |
注意,OpenSSH 配置一般使用空格分隔,推荐写成 PasswordAuthentication yes,不要写成 PasswordAuthentication=yes。
改完后先检查配置语法:
1 | |
如果没有输出,说明配置语法基本没问题。然后重启 SSH 服务:
1 | |
如果你不确定服务名,可以查看:
1 | |
如果你正在通过 SSH 修改 SSH 配置,建议保留当前已登录的窗口不要关。另开一个新终端测试新连接,确认能登录后,再退出旧窗口。
否则配置写错、服务重启失败,可能会把自己锁在服务器外面。
Ubuntu 允许 root 登录
很多 Ubuntu 云镜像默认不允许 root 直接 SSH 登录,而是让你使用 ubuntu 用户,再通过 sudo 提权:
1 | |
如果你确实要允许 root 远程登录,可以编辑:
1 | |
设置:
1 | |
然后检查并重启:
1 | |
不过更推荐的方式是:不要开放 root 密码登录。可以使用普通用户登录,再用 sudo 执行管理员命令。
密钥登录
长期使用服务器,更推荐密钥登录。
密钥登录不是把密码换成一个更长的密码,而是使用一对密钥:
- 私钥:放在你自己的电脑上,绝对不要发给别人。
- 公钥:放在服务器上,可以理解为“允许这把私钥登录”的登记信息。
登录时,本地 SSH 客户端会用私钥完成签名,服务器用公钥验证。私钥不会被发送到服务器。
flowchart TB
A[本地电脑生成密钥对] --> B[私钥保存在本地<br>id_ed25519]
A --> C[公钥复制到服务器<br>id_ed25519.pub]
C --> D[写入 ~/.ssh/authorized_keys]
B --> E[ssh -i 私钥 用户名@服务器IP]
D --> F[服务器验证签名]
E --> F
F --> G{验证通过?}
G -->|是| H[登录成功]
G -->|否| I[Permission denied]
生成密钥
现在我更推荐使用 Ed25519 密钥:
1 | |
如果你的服务器系统非常旧,不支持 Ed25519,可以退回 RSA:
1 | |
生成过程中会问几个问题:
1 | |
含义如下:
| 提示 | 建议 |
|---|---|
Enter file in which to save the key |
密钥保存位置。默认是 ~/.ssh/id_ed25519,直接回车即可 |
Enter passphrase |
私钥保护密码。个人电脑建议设置,自动化脚本可以留空 |
Enter same passphrase again |
再输入一次私钥保护密码 |
生成后一般会有两个文件:
1 | |
其中:
id_ed25519是私钥,不能泄露。id_ed25519.pub是公钥,可以放到服务器。
查看公钥内容:
1 | |
公钥通常长这样:
1 | |
你要复制的是整行,从 ssh-ed25519 开始,到最后的备注结束。

方法一:使用 ssh-copy-id
如果服务器当前还能用密码登录,最简单的方法是 ssh-copy-id:
1 | |
比如:
1 | |
如果 SSH 端口不是 22:
1 | |
如果你要指定某个公钥文件:
1 | |
它会自动把你的公钥追加到服务器对应用户的:
1 | |
然后测试登录:
1 | |
如果不再要求输入服务器用户密码,就说明密钥登录成功了。
Windows 自带 OpenSSH 有时没有 ssh-copy-id,可以用下面的手动方法。
方法二:手动写入 authorized_keys
先用密码登录服务器:
1 | |
在服务器上创建 .ssh 目录,并设置权限:
1 | |
编辑 authorized_keys:
1 | |
把你本地 id_ed25519.pub 的整行公钥粘贴进去,一行一个公钥。
保存后设置权限:
1 | |
如果你是用 root 帮普通用户配置,还要确认文件属于目标用户:
1 | |
比如用户叫 demo:
1 | |
然后在本地测试:
1 | |

方法三:云厂商控制台绑定密钥
云服务器一般也支持在控制台绑定 SSH 密钥。大致流程是:
- 本地生成密钥对,复制公钥。
- 在云厂商控制台创建“SSH 密钥”或“密钥对”。
- 把公钥粘贴到控制台。
- 将密钥绑定到服务器实例。
- 使用本地私钥登录。

这种方法适合新建服务器时就配置密钥。不同云厂商的“绑定后是否需要重启服务器”不完全一样,以控制台提示为准。
指定私钥登录
如果你使用的不是默认私钥名,就需要用 -i 指定私钥:
1 | |
如果端口也不是默认 22:
1 | |
私钥权限太宽时,OpenSSH 可能拒绝使用它。macOS 和 Linux 可以这样修复:
1 | |
写 SSH Config
当服务器多了以后,每次都输入:
1 | |
确实很烦。可以把配置写到本机的:
1 | |
示例:
1 | |
以后登录只需要:
1 | |
还可以直接复制文件:
1 | |
或者使用 VS Code Remote SSH 连接 myserver。
常用字段含义:
| 字段 | 含义 |
|---|---|
Host |
本地别名,可以随便起 |
HostName |
真实服务器 IP 或域名 |
User |
登录用户名 |
Port |
SSH 端口 |
IdentityFile |
私钥路径 |
IdentitiesOnly yes |
只使用这里指定的私钥,避免客户端乱试其他钥匙 |
创建普通用户
如果你一直用 root 登录,操作确实方便,但也更危险。更推荐创建一个普通用户,通过 sudo 管理服务器。
以 Debian / Ubuntu 为例:
1 | |
以 CentOS / Rocky / AlmaLinux 为例:
1 | |
然后给这个用户配置 SSH 公钥:
1 | |
本地测试:
1 | |
登录后验证 sudo:
1 | |
如果输出:
1 | |
说明这个普通用户可以通过 sudo 执行管理员命令。
关闭密码登录
确认密钥登录和 sudo 都没问题以后,可以考虑关闭密码登录。
编辑:
1 | |
推荐配置:
1 | |
含义:
PubkeyAuthentication yes:允许密钥登录。PasswordAuthentication no:禁止密码登录。PermitRootLogin prohibit-password:root 不能用密码登录,但可以在配置了公钥时用密钥登录。
如果你想更严格,可以完全禁止 root 远程登录:
1 | |
改完后检查配置:
1 | |
重启服务:
1 | |
然后开一个新终端测试:
1 | |
确认新连接能登录,再关闭旧窗口。
端口和安全组
很多新手 SSH 连不上,其实不是用户名密码错,而是网络层没通。
SSH 默认端口是 TCP 22。你至少要确认三处:
flowchart LR
A[本地电脑] --> B[本地网络<br>运营商 / 路由器]
B --> C[云厂商安全组<br>放行 TCP 22]
C --> D[服务器防火墙<br>ufw / firewalld / iptables]
D --> E[sshd 服务<br>监听 22 端口]
云服务器安全组
云服务器一般有“安全组”或“防火墙”功能。你需要放行:
1 | |
如果只是临时测试,可以先放行 0.0.0.0/0。长期使用更建议只放行自己的公网 IP,或者使用云厂商的 Web SSH / 堡垒机 / VPN。
服务器防火墙
Ubuntu 常见 ufw:
1 | |
CentOS / Rocky / AlmaLinux 常见 firewalld:
1 | |
如果你改了 SSH 端口,比如 2222,也要放行新端口:
1 | |
或者:
1 | |
查看 sshd 是否监听
在服务器上执行:
1 | |
可能看到:
1 | |
说明 SSH 服务端正在监听 22 端口。
文件传输
SSH 不只可以登录,还可以传文件。
scp
把本地文件上传到服务器:
1 | |
从服务器下载文件到本地:
1 | |
指定端口:
1 | |
注意:ssh 用小写 -p 指定端口,scp 用大写 -P。
sftp
进入交互式文件传输:
1 | |
常用命令:
1 | |
如果你已经写了 SSH Config:
1 | |
常见问题排查
SSH 报错信息通常很有价值。下面这些是新手最容易遇到的。
Connection timed out
典型提示:
1 | |
常见原因:
- 服务器 IP 写错。
- 服务器没开机。
- 云安全组没放行 22 端口。
- 服务器防火墙没放行 22 端口。
- SSH 服务没启动。
- 你的网络到服务器线路不通。
排查顺序:
1 | |
然后去云厂商控制台检查安全组,再用 Web SSH 登录服务器检查:
1 | |
Connection refused
典型提示:
1 | |
这通常说明网络能到服务器,但目标端口没有服务在监听,或者被服务器主动拒绝。
检查:
1 | |
如果配置写错,先修复 /etc/ssh/sshd_config,再重启服务。
Permission denied publickey
典型提示:
1 | |
意思是:服务器要求密钥登录,但你本地提供的私钥没有通过验证。
常见原因:
- 用户名错了。
- 服务器上没有放你的公钥。
- 公钥放错用户了,比如放到
/root/.ssh/authorized_keys,却用ubuntu登录。 - 本地没有使用正确私钥。
- 服务器上的
.ssh或authorized_keys权限不对。 sshd_config禁用了公钥登录。
本地指定私钥测试:
1 | |
本地打开详细日志:
1 | |
服务器上检查权限:
1 | |
如果是普通用户:
1 | |
Permission denied password
典型提示:
1 | |
常见原因:
- 密码错了。
- 用户名错了。
- 服务器禁用了密码登录。
- root 被禁止远程登录。
- 云厂商没有给这个镜像开启密码登录。
检查 /etc/ssh/sshd_config:
1 | |
更推荐做法是:使用控制台或 Web SSH 登录服务器,把公钥配置好,然后改用密钥登录。
REMOTE HOST IDENTIFICATION HAS CHANGED
典型提示:
1 | |
常见原因:
- 服务器重装系统了。
- 云服务器 IP 绑定到了另一台机器。
- 你连接到了错误的服务器。
- 存在中间人攻击风险。
如果你确认是自己重装了服务器,可以删除本地旧指纹:
1 | |
如果你使用的是域名:
1 | |
如果有自定义端口:
1 | |
然后重新连接,确认新指纹。

WARNING: UNPROTECTED PRIVATE KEY FILE
典型提示:
1 | |
意思是私钥权限太宽,OpenSSH 拒绝使用。
修复:
1 | |
如果是整个 .ssh 目录权限有问题:
1 | |
注意:如果 .ssh 里有 .pub 公钥文件,公钥权限宽一点通常没关系,但统一收紧也可以。
Too many authentication failures
典型提示:
1 | |
本地 SSH Agent 里可能加载了太多私钥,服务器试了几把都失败,就断开了。
指定私钥并限制只使用它:
1 | |
或者写入 ~/.ssh/config:
1 | |
no matching host key type found
典型提示:
1 | |
这常见于很旧的服务器。较新的 OpenSSH 默认不再接受一些旧的 ssh-rsa 算法组合。
更推荐的修复方式是升级服务器系统和 OpenSSH,重新生成现代主机密钥。如果只是临时连接旧设备,可以临时加参数:
1 | |
不建议长期这样使用。旧算法兼容只是救急方案,不是安全方案。
新手安全清单
SSH 能登录以后,建议至少做这些事:
flowchart TD
A[首次登录服务器] --> B[更新系统软件包]
B --> C[创建普通用户]
C --> D[给普通用户配置 sudo]
D --> E[配置 SSH 密钥登录]
E --> F[确认新终端可用密钥登录]
F --> G[关闭密码登录]
G --> H[限制安全组来源 IP]
H --> I[保留云厂商控制台救援入口]
更新系统
Debian / Ubuntu:
1 | |
CentOS / Rocky / AlmaLinux:
1 | |
旧 CentOS 可能使用:
1 | |
不要把私钥发给别人
再强调一次:
.pub结尾的是公钥,可以放服务器。- 没有
.pub的是私钥,只能放自己电脑。
如果私钥泄露,应该立刻:
- 删除服务器
authorized_keys里对应的公钥。 - 本地重新生成新密钥。
- 把新公钥部署到服务器。
保留救援入口
在你还不熟悉 SSH 配置时,建议保留至少一种救援方式:
- 云厂商 Web SSH。
- 云厂商 VNC 控制台。
- 快照或备份。
- 还没关闭的旧 SSH 会话。
SSH 配置改错并不可怕,可怕的是没有任何入口能改回来。
常用命令速查
最后把常用命令整理一下。
登录
1 | |
生成密钥
1 | |
复制公钥
1 | |
服务器权限
1 | |
检查 SSH 服务
1 | |
修复 known_hosts
1 | |
END
到这里,你已经掌握了 SSH 登录 Linux 服务器的核心方法。
如果你是第一次接触 Linux 服务器,建议先按这个顺序练习:
- 用密码登录一次服务器。
- 生成 SSH 密钥。
- 把公钥部署到服务器。
- 用密钥登录。
- 写
~/.ssh/config。 - 创建普通用户并配置 sudo。
- 确认密钥登录没问题后,再关闭密码登录。
SSH 是服务器世界的入口。刚开始看起来只是一个黑色终端,但熟悉以后,你会发现它非常稳定、清晰,也很适合自动化。后续搭建网站、部署 Docker、配置 Nginx、查看日志,基本都会从这一步开始。
如果你还需要 Linux 图形桌面,可以参考:
最后,如果你觉得本篇教程对你有帮助,欢迎加入我们的开发者交流群: 812198734 ,希望开发者可以共同探索技术。
