ssh · 隔空操作的钥匙
上游:sudo(在服务器端装 SSH 服务要 sudo)· ping(先确认两台机器网络是通的) 下游:
scp跨机器传文件 ·rsync增量同步 ·tmux断线不断任务(Tier 5 待建) 参见:ufw(22 号端口永远第一个放行)· systemctl(SSH 服务本身就是一个 systemd 服务)
一句话是什么
ssh(Secure Shell)让你在自己的电脑上打开一个终端,而这个终端里敲的每一条命令,都在另一台机器上执行。
两台机器之间的所有字符都经过加密,路过的人截到的只是一串乱码。
为什么需要它
Tier 4 结束时,Minecraft 服务器已经跑在 Aaron 房间的那台 Ubuntu 笔记本上了。问题是:
服务器要重启 → 得跑到 Aaron 房间
要看一眼日志 → 得跑到 Aaron 房间
Aaron 在上课,笔记本合着盖放在桌上 → 什么都做不了
有了 ssh,书房的 Mac 上一行命令就能”走进”那台笔记本:
ssh [email protected]之后的 ls、systemctl status mc-server、sudo ufw status,全部发生在笔记本上。
Tier 1-4 学的每一个命令,从这一刻起都可以隔空使用——这就是 Tier 5 叫”系统管理”的原因:真正的服务器大多放在机房里,没人坐在它前面,管理员全靠 SSH。
核心用法
公式
ssh [选项] 用户名@主机地址 [要执行的命令]
- 用户名:远程机器上的账号,不是你本机的账号
- 主机地址:IP(
192.168.1.23)或主机名 - 要执行的命令:可省略。省略就进入交互终端;写了就只执行这一条,然后自动退出
两端各需要什么
| 角色 | 需要的程序 | 怎么准备 |
|---|---|---|
| 客户端(你坐着的电脑) | ssh | Mac 和 Ubuntu 都自带 |
| 服务端(被登录的机器) | sshd(SSH 守护进程) | Ubuntu 桌面版默认没装:sudo apt install openssh-server |
客户端和服务端的关系,就像浏览器和网站:你用浏览器访问网站,网站那边得有程序在”接待”。sshd 就是那个接待员,默认守在 22 号端口。
常用命令表
| 命令 | 说明 | 什么时候用 |
|---|---|---|
ssh 用户@主机 | 登录远程机器 | 日常最常用 |
ssh -p 2222 用户@主机 | 指定端口(非 22) | 服务器改过端口时 |
ssh 用户@主机 '命令' | 只执行一条命令就回来 | 快速查状态 |
ssh -v 用户@主机 | 显示连接的详细过程 | 连不上时排查 |
exit 或 Ctrl+D | 退出远程终端,回到本机 | 用完一定要退 |
ssh-keygen -t ed25519 | 生成一对密钥 | 配置免密登录 |
ssh-copy-id 用户@主机 | 把公钥送到服务器 | 配置免密登录 |
第一次连接:那句看不懂的提问
第一次 ssh 一台新机器,一定会看到:
The authenticity of host '192.168.1.23 (192.168.1.23)' can't be established.
ED25519 key fingerprint is SHA256:Xq3v...(一长串)
Are you sure you want to continue connecting (yes/no/[fingerprint])?
翻译过来是:「我从没见过这台机器,它出示的身份证号是这一串。你确定它就是你要找的那台吗?」
输入 yes 之后,这串”身份证号”会被记进你本机的 ~/.ssh/known_hosts 文件。以后每次连接,ssh 都会核对一遍。
如果哪天看到这个吓人的警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
意思是”同一个地址,身份证号变了”。两种可能:
- 无害:服务器重装过系统,生成了新的身份证——这是最常见的情况
- 有害:有人冒充了这台服务器(中间人攻击)
确认是第 1 种(比如你自己刚重装了 Ubuntu),用这条命令删掉旧记录再连:
ssh-keygen -R 192.168.1.23不确定原因时不要删——这个警告存在的意义,就是让你停下来想一想。
密钥登录:用钥匙代替密码
每次输密码有两个麻烦:手累,而且密码可能被猜中。SSH 更推荐用密钥对:
| 文件 | 比喻 | 能不能给别人 |
|---|---|---|
~/.ssh/id_ed25519 | 私钥 = 你手里的钥匙 | ❌ 永远不能,谁拿到谁就是你 |
~/.ssh/id_ed25519.pub | 公钥 = 配套的锁 | ✅ 可以随便发,装到哪台服务器上都行 |
原理:你把”锁”(公钥)装在服务器的 ~/.ssh/authorized_keys 里。登录时服务器出一道只有对应钥匙才能解的题,你的电脑用私钥解出来——私钥本身从不离开你的电脑。
Linux 笑话
爸爸在书房开了两个终端窗口:左边是 SSH 进去的 Aaron 笔记本,右边是自己的 Mac。
他想重启一下 Mac,在左边窗口敲下:
sudo reboot一秒后,左边窗口显示:Connection to 192.168.1.23 closed by remote host.
隔壁房间传来 Aaron 的喊声:「爸爸!我的笔记本自己黑屏了!我的作业还没保存!」
教训:敲任何危险命令之前,先看一眼提示符。
aaron@mc-laptop:~$ ← 你在 Aaron 的笔记本上
dad@MacBook ~ % ← 你在自己的 Mac 上
提示符里 @ 后面那个名字,就是命令真正要去的地方。
例题精讲
📗 初探 Starter — 第一次登录
# 服务端(在 Aaron 笔记本上,只需做一次)
sudo apt install openssh-server
sudo systemctl status ssh # 看到 active 说明接待员已上岗
hostname -I # 查出笔记本的 IP,比如 192.168.1.23
# 客户端(在 Mac 上)
ping -c 3 192.168.1.23 # 先确认网络通
ssh [email protected] # 第一次会问指纹,输入 yes,再输密码
# 登录成功后提示符变成 aaron@mc-laptop:~$
whoami # aaron
exit # 回到 Mac📘 应用 User — 配置免密登录 + 起别名
# 第一步:在 Mac 上生成密钥对(一路回车即可,也可以设一个密钥口令)
ssh-keygen -t ed25519
# 第二步:把公钥装到笔记本上(这一步还要输最后一次密码)
ssh-copy-id [email protected]
# 没有 ssh-copy-id 时,手动做同样的事:
cat ~/.ssh/id_ed25519.pub | ssh [email protected] \
'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
# 第三步:给这台机器起个短名字
nano ~/.ssh/config写入:
Host mc-laptop
HostName 192.168.1.23
User aaron
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
# 从此只需要:
ssh mc-laptopServerAliveInterval 60 的意思是每 60 秒发一次”我还在”,防止长时间不敲键盘被路由器断开。
📙 管理 Admin — 隔空巡检与排障
# 不进终端,一条命令拿到服务器状态
ssh mc-laptop 'systemctl is-active mc-server' # active
ssh mc-laptop 'df -h /' # 磁盘还剩多少
ssh mc-laptop 'sudo journalctl -u mc-server -n 20' # 最近 20 行日志(可能要输 sudo 密码)连不上时,报错信息就是线索,按这张表对号入座:
| 报错 | 意思 | 去查哪个节点 |
|---|---|---|
Connection timed out | 敲门没人应,包被挡或网络不通 | ping 看通不通,ufw 看 22 端口放没放 |
Connection refused | 门是通的,但没人守 22 号门 | systemctl:sudo systemctl status ssh |
Permission denied (publickey) | 门卫不认你的钥匙 | chmod:~/.ssh 必须是 700,authorized_keys 必须是 600 |
为什么权限太宽反而登录不了? sshd 的逻辑是:如果
authorized_keys谁都能改,那任何人都能偷偷塞一把锁进去——这个文件就不可信了,干脆拒绝。权限是信任的前提。
终端卡死怎么办? 网络断了之后 ssh 窗口常常”冻住”,Ctrl+C 也没反应。依次按 回车 → ~ → .,这是 ssh 自带的紧急断开键。
全英文阅读
摘自 OpenSSH 官方手册 man ssh 的 DESCRIPTION 段:
ssh (SSH client) is a program for logging into a remote machine and for executing commands on a remote machine. It is intended to provide secure encrypted communications between two untrusted hosts over an insecure network.
| 词 | 意思 | 在这句里 |
|---|---|---|
| remote | 远程的、远处的 | 另一台机器 |
| execute | 执行 | 让命令跑起来 |
| intended to | 设计目的是 | 说明 ssh 为什么存在 |
| encrypted | 加密的 | 路人看不懂 |
| untrusted | 不被信任的 | 双方默认谁也不信谁 |
| insecure | 不安全的 | 网络本身可能被窃听 |
读懂这句话的关键:ssh 不假设网络是安全的,也不假设对方是可信的——所以才有指纹核对和密钥认证。前面学的每一步”麻烦”,都是这句设计目标的具体落地。
节点链接
上游(连之前要会的)
同层排障(连不上时去这些节点找答案)
- ufw ← 22/tcp 必须放行,而且要在 enable 之前
- systemctl ← SSH 服务本身由 systemd 管理
- chmod ←
~/.ssh目录和密钥文件的权限 - nano ← 编辑
~/.ssh/config
下游(Tier 5 待建)
scp← 借 SSH 通道复制文件rsync← 借 SSH 通道增量同步备份tmux← SSH 断线后让服务器上的任务继续跑
实战
- Minecraft-Bedrock-Server ← 从此不用跑到 Aaron 房间管服务器
- Tier5-节点清单 ← Tier 5 全部节点与进度
节点版本:v1.0 · 2026-10-29 Tier 5 首个节点——从这里开始,命令可以隔空执行