目录
[一、curl -- 多功能网络传输工具](#一、curl – 多功能网络传输工具)
[1.1 基本概念](#1.1 基本概念)
[1.2 常用选项与用法](#1.2 常用选项与用法)
[1.2.1 查看网页内容](#1.2.1 查看网页内容)
[1.2.2 查看 HTTP 响应头(不下载正文)](#1.2.2 查看 HTTP 响应头(不下载正文))
[1.2.3 跟随重定向](#1.2.3 跟随重定向)
[1.2.4 使用代理](#1.2.4 使用代理)
[1.2.5 保存网页/文件到本地](#1.2.5 保存网页/文件到本地)
[1.2.6 断点续传](#1.2.6 断点续传)
[1.2.7 限速下载](#1.2.7 限速下载)
[1.2.8 FTP 操作](#1.2.8 FTP 操作)
[1.2.9 发送 POST 请求(测试 API)](#1.2.9 发送 POST 请求(测试 API))
[1.2.10 设置 User-Agent](#1.2.10 设置 User-Agent)
[1.2.11 忽略证书校验(HTTPS)](#1.2.11 忽略证书校验(HTTPS))
[二、wget -- 专业下载工具](#二、wget – 专业下载工具)
[2.1 特点](#2.1 特点)
[2.2 基本用法](#2.2 基本用法)
[2.2.1 直接下载](#2.2.1 直接下载)
[2.2.2 指定保存文件名或目录](#2.2.2 指定保存文件名或目录)
[2.2.3 后台下载](#2.2.3 后台下载)
[2.2.4 断点续传](#2.2.4 断点续传)
[2.2.5 测试下载(不实际保存)](#2.2.5 测试下载(不实际保存))
[2.2.6 限速](#2.2.6 限速)
[2.2.7 递归下载整个网站](#2.2.7 递归下载整个网站)
[2.2.8 从文件中批量下载](#2.2.8 从文件中批量下载)
[2.2.9 设置代理](#2.2.9 设置代理)
[三、SSH 远程连接与安全传输](#三、SSH 远程连接与安全传输)
[3.1 OpenSSH 套件组成](#3.1 OpenSSH 套件组成)
[3.2 基本远程登录](#3.2 基本远程登录)
[3.3 基于密钥的免密登录](#3.3 基于密钥的免密登录)
[3.3.1 生成密钥对](#3.3.1 生成密钥对)
[3.3.2 将公钥传到远程服务器](#3.3.2 将公钥传到远程服务器)
[3.3.3 测试](#3.3.3 测试)
[3.3.4 SSH 代理(避免重复输入 passphrase)](#3.3.4 SSH 代理(避免重复输入 passphrase))
[3.4 SSH 服务器配置(安全加固)](#3.4 SSH 服务器配置(安全加固))
[3.5 scp -- 安全复制(不推荐,使用 rsync 替代)](#3.5 scp – 安全复制(不推荐,使用 rsync 替代))
[3.6 sftp -- 交互式安全文件传输](#3.6 sftp – 交互式安全文件传输)
[3.7 SSH 端口转发(隧道)](#3.7 SSH 端口转发(隧道))
[3.7.1 本地端口转发(Local Forward)](#3.7.1 本地端口转发(Local Forward))
[3.7.2 远程端口转发(Remote Forward)](#3.7.2 远程端口转发(Remote Forward))
[3.7.3 动态端口转发(SOCKS 代理)](#3.7.3 动态端口转发(SOCKS 代理))
[四、rsync -- 高效文件同步工具](#四、rsync – 高效文件同步工具)
[4.1 特点](#4.1 特点)
[4.2 基本语法](#4.2 基本语法)
[4.3 重要:路径末尾斜杠的含义](#4.3 重要:路径末尾斜杠的含义)
[4.4 常用选项](#4.4 常用选项)
[4.5 实战案例](#4.5 实战案例)
适用系统:RHEL 9 / CentOS Stream 9
主要涉及:curl, wget, ssh, scp, sftp, rsync
涵盖 curl、wget、SSH、scp、sftp、rsync 以及 SSH 端口转发、密钥登录等高级内容。
一、curl -- 多功能网络传输工具
1.1 基本概念
- 全称:Client URL (最小化自带)
- 功能:支持 HTTP/HTTPS/FTP/FTPS/TFTP 等协议,可查看网页内容、下载/上传文件、测试接口等。
- 特点:命令行下工作,支持代理、认证、Cookie、断点续传等。
1.2 常用选项与用法
1.2.1 查看网页内容
curl http://www.baidu.com
# 输出源码到终端(默认不显示 HTTP 头)

1.2.2 查看 HTTP 响应头(不下载正文)
curl -I http://www.baidu.com
# 输出示例:
# HTTP/1.1 200 OK
# Server: Apache/2.4.57
# Content-Type: text/html

常见状态码:
|-----|-------|
| 码 | 含义 |
| 200 | 成功 |
| 301 | 永久重定向 |
| 302 | 临时重定向 |
| 403 | 无权限 |
| 404 | 未找到 |
| 502 | 网关错误 |
| 503 | 服务不可用 |
1.2.3 跟随重定向
curl -L http://tinyurl.com/xxx
# 自动跟踪 Location 头
1.2.4 使用代理
curl -x 192.168.100.100:1080 http://www.linux.com
# -x 指定代理服务器和端口
1.2.5 保存网页/文件到本地
|------|------------|-------------------------------------------------------------|
| 选项 | 说明 | 示例 |
| -O | 保存为远程文件名 | curl -O http://example.com/file.tar.gz |
| -o | 指定本地文件名/路径 | curl -o /opt/myfile.tar.gz http://example.com/file.tar.gz |
1.2.6 断点续传
curl -C - -O http://example.com/bigfile.iso
# -C - 表示自动检测已下载的偏移量
1.2.7 限速下载
curl --limit-rate 200k -O http://example.com/bigfile.iso
1.2.8 FTP 操作
下载(需认证):
curl -u 用户名:密码 ftp:www.xxx
# 方式1:使用 -u
curl -O -u username:password ftp://example.com/file.jpg
# 方式2:URL 中包含凭据
curl -O ftp://username:password@example.com/file.jpg
上传:
curl -T localfile.txt ftp://example.com/ --user username:password
1.2.9 发送 POST 请求(测试 API)
curl -X POST -d "name=zhang&age=25" http://example.com/api
# -d 指定数据(application/x-www-form-urlencoded)
1.2.10 设置 User-Agent
curl -A "Mozilla/5.0" http://example.com
1.2.11 忽略证书校验(HTTPS)
curl -k https://self-signed.badssl.com
二、wget -- 专业下载工具
2.1 特点
- 支持 HTTP/HTTPS/FTP
- 支持断点续传、后台下载、递归下载
- 显示进度条,信息更直观
2.2 基本用法
2.2.1 直接下载
wget https://mirrors.aliyun.com/centos/8/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso
2.2.2 指定保存文件名或目录
# 改名
wget -O newname.iso http://example.com/file.iso
# 指定目录(目录必须已存在)
wget -P /opt/ http://example.com/file.tar.gz
2.2.3 后台下载
wget -b http://example.com/bigfile.iso
# 输出日志到 wget-log,可用 tail -f wget-log 查看进度
2.2.4 断点续传
wget -c http://example.com/bigfile.iso
2.2.5 测试下载(不实际保存)
wget --spider http://example.com/file
# 仅发送请求头,检查文件是否存在
2.2.6 限速
wget --limit-rate=500k http://example.com/bigfile.iso
2.2.7 递归下载整个网站
wget -r -l 5 -np -k http://example.com/docs/
# -r 递归
# -l 5 最多5层
# -np 不进入上级目录
# -k 转换链接为本地相对路径
2.2.8 从文件中批量下载
wget -i url_list.txt
# url_list.txt 每行一个 URL
2.2.9 设置代理
# 编辑 /etc/wgetrc 或在命令行
wget -e use_proxy=yes -e http_proxy=192.168.1.100:8080 http://example.com
三、SSH 远程连接与安全传输
- 默认保存路径:~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)
3.1 OpenSSH 套件组成
|-------------------|-----------------------|
| 软件包 | 作用 |
| openssh-server | 服务端(sshd 守护进程) |
| openssh-clients | 客户端(ssh, scp, sftp 等) |
| openssh | 公共文件与帮助文档 |
3.2 基本远程登录
ssh user@remote_host
# 默认端口 22
# 首次连接会提示保存 host key,输入 yes
指定端口:
ssh -p 2222 user@remote_host
远程执行命令(非交互):
ssh user@remote_host "ls -l /tmp"
X11 转发(图形程序):
ssh -X user@remote_host
# 然后运行图形程序(如 gedit),界面显示在本地
3.3 基于密钥的免密登录
3.3.1 生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 默认保存路径:~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)
# 可设置 passphrase(空密码则完全免密)
3.3.2 将公钥传到远程服务器
# 自动方式(推荐)
ssh-copy-id user@remote_host
# 手动方式
cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
3.3.3 测试
ssh user@remote_host # 应不再提示密码
3.3.4 SSH 代理(避免重复输入 passphrase)
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa # 输入一次 passphrase,后续会话无需再输
3.4 SSH 服务器配置(安全加固)
配置文件:/etc/ssh/sshd_config(修改后执行 systemctl restart sshd)
|--------------------------|-------------|---------------|
| 配置项 | 推荐值 | 作用 |
| Port | 2222(非默认) | 避免扫描攻击 |
| PermitRootLogin | no | 禁止 root 直接登录 |
| PasswordAuthentication | no | 禁止密码登录(仅允许密钥) |
| PubkeyAuthentication | yes | 启用密钥认证 |
| AllowUsers | user1 user2 | 仅允许特定用户登录 |
| DenyUsers | baduser | 禁止某些用户 |
| AllowGroups | sshusers | 仅允许特定组登录 |
| MaxAuthTries | 3 | 最大认证尝试次数 |
| ClientAliveInterval | 300 | 客户端空闲超时(秒) |
用户/组限制示例:
AllowUsers *@192.168.1.* # 仅允许 192.168.1.0/24 网段的用户
AllowUsers zhangsan lisi # 只允许这两个用户登录
3.5 scp -- 安全复制(不推荐,使用 rsync 替代)
RHEL9 中 SCP 存在安全漏洞,官方建议使用 sftp 或 rsync。
# 上传本地文件到远程
scp localfile user@remote:/path/
# 下载远程文件到本地
scp user@remote:/path/file ./
# 复制目录(-r)
scp -r /local/dir user@remote:/remote/dir
# 指定端口(大写 P)
scp -P 2222 file user@remote:/path/
3.6 sftp -- 交互式安全文件传输
sftp user@remote_host
# 进入交互界面,类似 FTP 命令
常用 sftp 命令:
|----------------|--------|
| 命令 | 作用 |
| ls | 列出远程目录 |
| lls | 列出本地目录 |
| cd | 切换远程目录 |
| lcd | 切换本地目录 |
| get file | 下载文件 |
| put file | 上传文件 |
| rm file | 删除远程文件 |
| mkdir | 创建远程目录 |
| exit 或 bye | 退出 |
3.7 SSH 端口转发(隧道)
3.7.1 本地端口转发(Local Forward)
场景:想访问远程主机 A 的服务(如数据库),但防火墙限制,而你可以 SSH 到主机 B,且 B 能访问 A 的该端口。
格式:
ssh -L [本地地址:]本地端口:目标地址:目标端口 中转主机
示例:将本地的 1888 端口转发到远程 12.0.0.146 的 80 端口
ssh -N -g -L 1888:12.0.0.146:80 12.0.0.146
# -N:不执行远程命令(仅转发)
# -g:允许其他主机连接本地 1888 端口(否则只允许 127.0.0.1)
然后访问 http://127.0.0.1:1888 等同于访问 http://12.0.0.146。
3.7.2 远程端口转发(Remote Forward)
场景:想让远程服务器访问你本地的一个服务(如在家办公,让公司服务器能连你本地的 web)。
格式:
ssh -R 远程端口:本地地址:本地端口 中转主机
示例:
ssh -R 9090:localhost:80 user@remote_server
这样在远程服务器上访问 localhost:9090 就转发到你本地的 80 端口。
3.7.3 动态端口转发(SOCKS 代理)
场景:作为 SOCKS5 代理,所有流量通过 SSH 隧道。
格式:
ssh -D 本地端口 中转主机
示例:
ssh -N -D 1080 user@remote_server
然后在浏览器中设置 SOCKS5 代理为 127.0.0.1:1080,所有流量都经过远程服务器。
四、rsync -- 高效文件同步工具
4.1 特点
- 支持本地和远程同步(通过 SSH)
- 增量传输:仅传送文件差异部分,节省带宽
- 保留文件属性(权限、时间、属主等)
- 支持排除、删除多余文件等高级操作
4.2 基本语法
本地同步:
rsync [选项] 源路径 目标路径
远程同步(通过 SSH):
# 推送(Push):本地 → 远程
rsync [选项] /local/dir/ user@remote:/remote/dir/
# 拉取(Pull):远程 → 本地
rsync [选项] user@remote:/remote/dir/ /local/dir/
4.3 重要:路径末尾斜杠的含义
|-----------------------|--------------------------------------------------|
| 写法 | 含义 |
| rsync -a /etc /tmp | 将 /etc 目录本身 复制到 /tmp,结果为 /tmp/etc |
| rsync -a /etc/ /tmp | 将 /etc/ 目录内的所有内容 复制到 /tmp,不包含 etc 目录本身 |
4.4 常用选项
|-------------------------|-----------------------------------------|
| 选项 | 说明 |
| -a | 归档模式(递归、保留符号链接、权限、时间、属主、组、设备文件) |
| -v | 详细输出 |
| -z | 传输时压缩 |
| -n | dry-run,演习(不实际传输,显示将要执行的操作) |
| --delete | 删除目标端多余的文件(使目标与源完全一致) |
| --exclude | 排除文件或目录(可多次使用) |
| --include | 包含规则(与 exclude 配合) |
| --progress | 显示传输进度 |
| -P | 等价于 --partial --progress(支持断点续传并显示进度) |
| -r | 递归(-a 已包含) |
| --existing | 仅更新目标端已存在的文件(不新增文件) |
| --ignore-existing | 仅拷贝目标端不存在的文件 |
| --remove-source-files | 传输完成后删除源文件 |
| -R | 使用相对路径(会在目标端创建完整的源路径结构) |
4.5 实战案例
案例1 :完整备份 /etc 到 /backup(保留目录结构)
rsync -a /etc /backup # 结果是 /backup/etc
案例2 :将当前目录下所有 .conf 文件同步到远程,并删除远程多余文件
rsync -av --delete *.conf user@remote:/remote/dir/
案例3:演习(看看会做什么,但不实际执行)
rsync -avn --delete /local/dir/ user@remote:/remote/dir/
案例4 :排除 .git 目录同步
rsync -av --exclude='.git' /myproject/ user@remote:/backup/project/
案例5:只更新目标端已经存在的文件(不新增)
rsync -av --existing /src/ /dest/
案例6:通过 SSH 指定不同端口
rsync -av -e "ssh -p 2222" /local/dir/ user@remote:/remote/dir/
五、综合对比与选型建议
|---------|-------------------|--------------|------------------|
| 工具 | 主要用途 | 优点 | 缺点 |
| curl | 网页查看、API 测试、上传/下载 | 功能全面,支持多种协议 | 下载大文件交互不友好 |
| wget | 文件下载 | 支持后台、递归、断点续传 | 上传功能弱 |
| ssh | 远程登录 | 加密安全,可隧道转发 | 需配置服务端 |
| scp | 简单文件复制 | 命令简单 | 有安全漏洞(RHEL9 不推荐) |
| sftp | 交互式文件管理 | 安全,支持目录操作 | 不如 rsync 高效 |
| rsync | 增量备份/同步 | 只传差异,支持删除、排除 | 语法稍复杂 |
推荐:
- 下载大文件 →
wget -b -c - 测试 HTTP 接口 →
curl -I / -X POST - 日常远程操作 →
ssh+ 密钥 - 定期备份/同步 →
rsync -av - 交互式文件上传下载 →
sftp
六、排错与调试技巧
- SSH 连接失败
-
- 检查服务端
sshd是否运行:systemctl status sshd - 检查防火墙:
firewall-cmd --list-services(确保 ssh 服务开放) - 查看日志:
journalctl -u sshd -f
- 检查服务端
- rsync 权限错误
-
- 确保目标目录用户可写
- 使用
-e "ssh -l user"指定远程用户
- curl/wget 下载慢
-
- 使用代理
-x或-e use_proxy=yes - 限速
--limit-rate避免占满带宽
- 使用代理
- 端口转发不生效
-
- 使用
-g选项允许外部连接 - 检查本地端口是否被占用:
netstat -tnlp | grep 端口号
- 使用