十、网络客户端工具curl, wget, ssh, scp, sftp, rsync

目录

[一、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

涵盖 curlwgetSSHscpsftprsync 以及 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 存在安全漏洞,官方建议使用 sftprsync

复制代码
# 上传本地文件到远程
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 | 创建远程目录 |
| exitbye | 退出 |

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

六、排错与调试技巧

  1. SSH 连接失败
    • 检查服务端 sshd 是否运行:systemctl status sshd
    • 检查防火墙:firewall-cmd --list-services(确保 ssh 服务开放)
    • 查看日志:journalctl -u sshd -f
  1. rsync 权限错误
    • 确保目标目录用户可写
    • 使用 -e "ssh -l user" 指定远程用户
  1. curl/wget 下载慢
    • 使用代理 -x-e use_proxy=yes
    • 限速 --limit-rate 避免占满带宽
  1. 端口转发不生效
    • 使用 -g 选项允许外部连接
    • 检查本地端口是否被占用:netstat -tnlp | grep 端口号

相关推荐
the sun341 小时前
集群架构实操:MySQL主、从节点配置
运维·服务器
袁小皮皮不皮1 小时前
6.HCIP OSPF域间防环机制与虚链路
服务器·网络·笔记·网络协议·学习·智能路由器
睡不醒男孩0308231 小时前
CLup篇之数据库传统运维对比
运维·数据库
AI78401 小时前
安全左移:网络安全从“亡羊补牢”走向“未雨绸缪”
网络·安全·web安全
caimouse1 小时前
Reactos 第 10 章 网络操作 — 10.2 NDIS及其实现
服务器·网络
changxiang1 小时前
Jenkins备忘
运维·jenkins
biter down2 小时前
4:Ubuntu 22.04 安装完成后的收尾与优化
linux·运维·ubuntu
热爱运维的小七2 小时前
深度解析|应用性能 + RUM + 拨测:现代 IT 运维的可观测性“铁三角”
运维·it运维·devops·apm·rum·网站拨测
zhuhai_xigedian2 小时前
物联网技术在源网荷储系统中的创新应用
大数据·运维·人工智能·区块链·能源