下载工作台
Linux 与 Shell 入门

SSH 远程登录与密钥

试读上半部分 · 解锁后可读全文

第 8 章 · SSH 远程登录与密钥

本章目标:理解 SSH 如何安全登录 Linux 云主机;生成 ed25519 密钥对;配置 ssh config 别名;用 scp/rsync 同步 shop-demo;遇到 Permission denied (publickey) 知道逐步排查。

学时建议:4~5 小时(含 2.5 小时跟练)

前置:完成 linux-shell ch07;有一台可 SSH 的 Linux(云主机、VirtualBox 虚拟机、或第二台 WSL 实例均可)。


8.1 场景说明:代码在笔记本,服务在云上

ch14 要在 Linux 服务器部署 api-go-demo。你本地 WSL 里改好了 shop-demo,Leader 说:「把代码弄到测试机,别发微信 zip。」

生产标准做法:

本机 ~/dev-workspace/shop-demo
        │  scp / rsync(走 SSH 加密通道)
        ▼
云主机 ubuntu@203.0.113.10:~/dev-workspace/shop-demo
        │  ch14:go build + systemd
        ▼
curl http://测试机:8080/healthz

SSH = 远程登录 + 传文件的安全隧道;密钥登录 = 不用每次输密码,且比弱密码安全得多。


8.2 学完你能

能力验收
密钥对~/.ssh/id_ed25519.pub 存在,权限正确
免密登录ssh shop-dev 一次成功
config 别名不用记 IP 和 -i 路径
传项目rsync 同步 shop-demo 到远端
排错publickey / timeout / Host key changed 各知怎么处理

8.3 两个概念:密码登录 vs 密钥登录

方式流程问题
密码每次 ssh user@ip 输入密码易被撞库;自动化脚本难写
密钥本机私钥 + 服务器公钥 配对私钥泄露=账号失守;需保管好

学院约定

  • 私钥永不进 Git、永不发聊天工具
  • 生产服务器逐步禁用密码登录(仅密钥),你只须理解概念
  • 日常开发用普通用户 + sudo不要习惯 ssh root@

8.4 跟练:生成 ed25519 密钥对

步骤 1 — 确认没有旧密钥冲突(可选)

ls -la ~/.ssh 2>/dev/null || echo "尚无 .ssh 目录,正常"

步骤 2 — 生成新密钥

ssh-keygen -t ed25519 -C "you@example.com" -f ~/.ssh/id_ed25519

交互时你应该看到

  • Enter passphrase:可直接回车(教学机);生产建议设 passphrase + ssh-agent
  • 生成完毕提示 Your identification has been saved...

步骤 3 — 权限(必须做,否则 SSH 拒绝)

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
ls -la ~/.ssh

读懂权限

文件权限原因
~/.ssh/700仅本人进目录
私钥 id_ed25519600泄露则别人能冒充你
公钥 .pub644本来就要给别人装

步骤 4 — 看公钥内容(待会装到服务器)

cat ~/.ssh/id_ed25519.pub

你应该看到一行:ssh-ed25519 AAAA... you@example.com


8.5 跟练:把公钥装到服务器

任选 A / B / C 一种环境练通即可。

方式 A:ssh-copy-id(最省事,需暂时能密码登录)

ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@YOUR_SERVER_IP

按提示输入最后一次服务器密码。成功后会写远端 ~/.ssh/authorized_keys

方式 B:云厂商控制台

阿里云 / 腾讯云 / AWS 等:密钥对实例 → 绑定公钥,粘贴 id_ed25519.pub 全文。

方式 C:手动(理解原理)

# 先密码登录一次
ssh ubuntu@YOUR_SERVER_IP
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys   # 粘贴本机 cat id_ed25519.pub 那一行
chmod 600 ~/.ssh/authorized_keys
exit

远端 authorized_keys 一行 = 允许哪把公钥对应的私钥登录


8.6 跟练:第一次密钥登录

ssh -i ~/.ssh/id_ed25519 ubuntu@YOUR_SERVER_IP

你应该看到:直接进入远端 shell,不再问密码(若仍问密码 → 见 8.10 排错)。

步骤 2 — 验证在远端

whoami
hostname
pwd
exit

8.7 跟练:ssh config 别名(老手必备)

每次记 IP 和 -i 太痛苦。编辑本机:

nano ~/.ssh/config

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。