第 7 章 · 06 远程登录与传输:`ssh`、`scp`、`rsync`


文档摘要

第 7 章 · 06 远程登录与传输: 、 、 本节摘要: 是远程登录与安全传输的事实标准——几乎所有服务器管理都靠它。本节要讲清三件事:一是 的密钥认证为什么比密码安全(以及怎么用 配置免密登录);二是 与 的差别(单次拷贝 vs 增量同步);三是 防的中间人攻击。还要顺带介绍 端口转发这个进阶能力——它是穿透防火墙、访问内网服务的「瑞士军刀」。理解 ssh,你就拥有了远程管理服务器的基础能力。 内容来源:综合 / 知识整理,套用体系化模板。 学习目标 阅读完本节,你应当能够: 用 登录远程服务器,理解它默认走 22 端口、全程加密。 用 生成密钥对,把公钥上传到服务器的 ,实现免密登录。 解释密钥认证为什么比密码安全(私钥不离本机、不可暴力破解)。

第 7 章 · 06 远程登录与传输:sshscprsync

本节摘要:ssh 是远程登录与安全传输的事实标准——几乎所有服务器管理都靠它。本节要讲清三件事:一是 ssh 的密钥认证为什么比密码安全(以及怎么用 ssh-keygen 配置免密登录);二是 scprsync 的差别(单次拷贝 vs 增量同步);三是 known_hosts 防的中间人攻击。还要顺带介绍 ssh 端口转发这个进阶能力——它是穿透防火墙、访问内网服务的「瑞士军刀」。理解 ssh,你就拥有了远程管理服务器的基础能力。

内容来源:综合 ssh/scp 知识整理,套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. ssh user@host 登录远程服务器,理解它默认走 22 端口、全程加密。
  2. ssh-keygen 生成密钥对,把公钥上传到服务器的 ~/.ssh/authorized_keys,实现免密登录。
  3. 解释密钥认证为什么比密码安全(私钥不离本机、不可暴力破解)。
  4. 说清 known_hosts 的作用:防止中间人攻击(首次连接记录指纹,后续比对)。
  5. scp 单次拷贝文件、用 rsync -avz 增量同步(呼应第 4 章)。
  6. 理解 ssh 端口转发的概念(本地转发、远程转发),知道它是穿透内网的工具。

一、设计动机:为什么远程登录要用 ssh

早期的远程登录工具(telnetrlogin)用明文传输——你敲的密码、传输的数据,在网络上任何一跳都能被嗅探。这在互联网早期还行,现在完全不可接受。

ssh(Secure Shell)的出现就是为了解决这个问题:全程加密——登录握手、密码/密钥认证、之后的所有交互数据,全部加密传输。即使流量被截获,攻击者也看不到内容。

ssh 的两大认证方式:

  • 密码认证:你输密码,加密通道传输。简单但密码可能被暴力破解。
  • 密钥认证(推荐):你本机有一对密钥(私钥+公钥),公钥放服务器,私钥自己留。认证时用非对称加密证明「我有私钥」,私钥从不在网络传输

密钥认证比密码安全得多:私钥不离开你的机器,攻击者无法通过网络嗅探或暴力破解得到它。生产服务器通常禁用密码、只允许密钥认证

二、高频组合与实战

密钥认证:配置免密登录

# 步骤 1: 本机生成密钥对(一路回车, 或设个 passphrase 更安全) ssh-keygen -t ed25519 # 生成 ~/.ssh/id_ed25519(私钥) 与 .pub(公钥) # ed25519 比 rsa 更现代更短, 推荐; 若兼容老系统用 rsa -b 4096 # 步骤 2: 把公钥上传到服务器(一条命令搞定) ssh-copy-id user@server # 自动追加公钥到服务器的 ~/.ssh/authorized_keys # 步骤 3: 之后 ssh user@server 不再问密码 ssh user@server

💡 技巧:ssh-copy-id 是配置免密登录最省事的方式。如果服务器没装这个命令,手动:把本机 ~/.ssh/id_ed25519.pub 的内容,追加到服务器的 ~/.ssh/authorized_keys 文件里(注意是追加 >>,不是覆盖 >)。

ssh 登录

ssh user@192.168.1.10 # 用 user 登录该 IP ssh user@server -p 2222 # -p 指定端口(默认 22) ssh -i ~/.ssh/special_key user@server # -i 指定私钥(多密钥场景)

scp:单次拷贝

scp file.txt user@server:/tmp/ # 本地 → 远程 scp user@server:/var/log/app.log ./ # 远程 → 本地 scp -r localdir user@server:/tmp/ # -r 递归拷目录 scp -P 2222 file user@server:/tmp/ # -P 大写, 指定端口(注意与 ssh 的 -p 区别!)

scp 适合「一次性拷贝」。它每次都全量传,文件大或反复传时低效。

rsync:增量同步(呼应第 4 章)

rsync -avz localdir/ user@server:/backup/ # 本地 → 远程增量同步 # -a 保留权限/时间等, -v 详细, -z 传输时压缩

rsync 走 ssh 通道,但只传差异部分,适合「反复同步」或大文件。详见第 4 章。

端口转发(进阶)

# 本地转发: 把远程的 3306(mysql) 映射到本机 13306 ssh -L 13306:localhost:3306 user@server # 之后本机连 localhost:13306 = 连服务器的 mysql # 远程转发: 把本机的服务暴露给远程(穿透 NAT, 反向) ssh -R 8080:localhost:80 user@server

端口转发是 ssh 的「隐藏大招」——它能穿透防火墙、安全访问内网服务、做临时隧道。日常排查也常用(如把内网数据库端口转到本地用图形工具连)。

三、踩坑与排错

坑 1:Host key verification failed

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

这是 known_hosts 在保护你:服务器的指纹变了,可能被中间人攻击,或(更常见的)服务器重装了系统、换了密钥。

ssh-keygen -R server # 删除旧指纹记录 ssh user@server # 重新接受新指纹

确认服务器确实换过密钥/重装过才能这么做,否则可能是真的中间人攻击。

坑 2:权限不对,密钥认证失败

chmod 700 ~/.ssh # .ssh 目录必须 700 chmod 600 ~/.ssh/authorized_keys # authorized_keys 必须 600 chmod 600 ~/.ssh/id_ed25519 # 私钥必须 600

ssh 对权限极其严格——.ssh 目录或密钥文件权限过松(对其他用户可读),ssh 会拒绝使用(防被窃)。权限不对是「配了密钥还问密码」的头号原因。

坑 3:scp 的 -P(端口)是大小,ssh 的 -p 是小写

ssh -p 2222 server # ssh 小写 -p scp -P 2222 file server:/tmp # scp 大写 -P

两者参数大小写相反,极易写错。这是历史遗留,只能记。

坑 4:scp 不支持断点续传

scp big.iso user@server:/tmp/ # 中断了只能重头来 rsync -avz --partial big.iso user@server:/tmp/ # rsync 支持断点, 大文件用 rsync

scp 一次失败就重来;大文件或不稳定网络用 rsync --partial(支持续传)。

本节要点回顾

  1. ssh 全程加密,是远程登录与安全传输的事实标准;密钥认证比密码安全(私钥不离本机,不可暴力破解)。
  2. 配置免密三步:ssh-keygen 生成密钥 → ssh-copy-id 上传公钥 → 直接 ssh user@host
  3. known_hosts 防中间人攻击:首次记录指纹,变了会警告(服务器重装后用 ssh-keygen -R 清旧记录)。
  4. 权限严格:.ssh 700、authorized_keys/私钥 600,权限不对是「配了密钥还问密码」的头号原因。
  5. scp 单次拷贝,rsync 增量同步:大文件或反复传用 rsync;scp 不支持断点续传。
  6. 端口转发是 ssh 的隐藏大招:穿透防火墙、访问内网、临时隧道。
  7. 大小写坑:ssh -p(小写)vs scp -P(大写)指定端口。

下一节是本章的终极武器——tcpdump,当所有上层工具都失效时,直接抓数据包看真相。


发布者: 作者: 灏天文库 转发
评论区 (0)
U