网络通信
网络通信是Linux系统中重要的功能之一,它允许计算机与其他设备进行数据交换和通信。Linux提供了丰富的网络命令工具,用于配置网络接口、测试网络连接、管理网络路由、监控网络流量等。
本章节将详细介绍Linux系统中常用的网络通信命令,包括网络连接测试工具(如ping)、网络配置工具(如ip、ifconfig)、网络路由管理工具(如route)、网络流量监控工具(如iftop、tcpdump)等。通过学习这些命令,您将能够有效地管理和排查Linux系统的网络问题。
ping - 网络连接测试工具
ping(Packet Internet Groper)是用于测试网络连接性的基础工具,通过发送 ICMP回显请求 数据包到目标主机,并等待其返回回显应答。
语法格式
ping [选项] 目标主机选项
| 选项 | 说明 |
|---|---|
-c <次数> | 指定发送的 ICMP 请求次数(如 -c 5 发送 5 次后自动停止) |
-i <秒数> | 设置发送间隔时间(默认 1 秒,需 root 权限设置 <0.2 秒) |
-s <字节数> | 指定发送的数据包大小(默认 56 字节,最大 65507) |
-t <TTL> | 设置数据包的生存时间(TTL),限制经过的路由器跳数 |
-W <秒数> | 设置等待响应的超时时间(默认无限制) |
-q | 静默模式,只显示统计结果 |
-f | 洪水模式(快速连续发送,需 root 权限,慎用!) |
-4 / -6 | 强制使用 IPv4 或 IPv6 |
-I <网卡名> | 指定发送数据包的网络接口(如 -I eth0) |
-D | 在时间戳前显示 Unix 时间 |
经典案例
1. 基本连通性测试
ping google.com # 持续测试直到手动停止(Ctrl+C)
ping -c 4 192.168.1.1 # 发送 4 次请求后自动停止
ping -s 1000 example.com # 发送 1000 字节的数据包(含 8 字节 ICMP 头)
ping -i 0.1 -c 50 192.168.1.1 # 每 0.1 秒发送一次,共 50 次
ping -t 5 google.com # 限制 TTL=5,检测路径中的路由器响应
ping -W 2 example.com # 设置 2 秒超时,检测高延迟网络
ping -q -c 10 8.8.8.8 # 只显示最终统计结果(丢包率、平均延迟)
sudo ping -f 192.168.1.1 # 高速发送请求(需 root 权限,谨慎使用!)
ping -I wlan0 google.com # 通过无线网卡发送请求IP - 网络配置工具
ip命令是iproute2软件包提供的现代网络配置工具,用于替代传统的ifconfig、route等命令。它提供了更强大的功能和更一致的语法。
语法格式
ip [ OPTIONS ] OBJECT { COMMAND | help }选项
| 选项 | 说明 |
|---|---|
| -s, -stats | 显示详细统计信息 |
| -d, -details | 显示详细信息 |
| -c, -color | 彩色输出 |
| -4 | 仅IPv4 |
| -6 | 仅IPv6 |
| -h, -human | 人类可读格式 |
经典案例
ip link show # 查看所有网络接口
ip addr show # 查看IP地址信息
ip link set eth0 up # 启用网络接口
ip link set eth0 down # 禁用网络接口
ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址
ip addr del 192.168.1.100/24 dev eth0 # 删除IP地址
ip route show # 查看路由表
ip route add 192.168.2.0/24 via 192.168.1.1 # 添加路由
ip route del 192.168.2.0/24 # 删除路由
ip neigh show # 查看ARP缓存ifup - 激活网卡
激活指定的网络接口(根据 /etc/network/interfaces 配置)
语法格式
ifup <接口名> [选项]选项
| 选项 | 作用 |
|---|---|
-a | 激活所有配置为 auto 的接口 |
--force | 强制激活(即使接口已启用) |
-v | 显示详细操作信息 |
经典案例
ifup eth0 # 激活 eth0 接口
ifup -a # 激活所有自动配置的接口
ifup --force wlan0 # 强制重新激活已启用的 wlan0ifdown - 停止网卡
停用指定的网络接口(根据 /etc/network/interfaces 配置
语法格式
ifdown <接口名> [选项]选项
| 选项 | 作用 |
|---|---|
-a | 停用所有配置为 auto 的接口 |
--force | 强制停用(即使有其他依赖) |
-v | 显示详细操作信息 |
经典案例
ifdown eth0 # 停用 eth0 接口
ifdown -a # 停用所有自动配置的接口
ifdown --force wlan0 # 强制停用正在使用的 wlan0注意事项
依赖关系:停用接口会断开所有相关网络连接
配置文件:需与
/etc/network/interfaces中的配置匹配系统兼容性:
旧版系统(Debian/Ubuntu):直接使用
新版系统(使用 NetworkManager):可能需要先禁用 NM 管理:
bashsudo nmcli dev set <接口名> managed no
ifconfig - 配置和显示网络接口信息
ifconfig(interface configuration)是 Linux 系统中用于配置和显示网络接口信息的传统命令,属于 net-tools 软件包。虽然在新系统中逐渐被 ip 命令取代,但仍广泛使用。
- 显示/配置网络接口参数(IP地址、子网掩码、MAC地址等)
- 启用/禁用网络接口
- 设置接口的MTU等高级参数
语法格式
ifconfig [接口名] [选项] [地址参数]选项
| 选项 | 说明 |
|---|---|
| up | 激活网络接口 |
| down | 禁用网络接口 |
| netmask | 设置子网掩码 |
| broadcast | 设置广播地址 |
| hw | 设置硬件地址(MAC) |
| mtu | 设置最大传输单元 |
| -a | 显示所有接口(包括未激活的) |
经典案例
ifconfig -a # 显示所有接口信息
ifconfig eth0 # 查看指定网卡信息
ifconfig eth0 up # 启用
ifconfig eth0 down # 禁用
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 配置IP地址和子网掩码
ifconfig eth0 hw ether 00:11:22:33:44:55 # 设置MAC地址netstat - 网络连接和统计信息查看工具
命令简介
netstat(network statistics)是一个功能强大的网络信息查看工具,用于显示网络连接、路由表、接口统计等信息。虽然在新版Linux中逐渐被ss命令取代,但仍然是广泛使用的网络诊断工具。
语法格式
netstat [选项]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-a | 显示所有连接和监听端口 | netstat -a |
-t | 显示TCP连接 | netstat -t |
-u | 显示UDP连接 | netstat -u |
-n | 以数字形式显示地址和端口 | netstat -n |
-l | 仅显示监听端口 | netstat -l |
-p | 显示进程ID/程序名 | netstat -p |
-r | 显示路由表 | netstat -r |
-s | 显示网络统计信息 | netstat -s |
-c | 持续输出信息 | netstat -c |
-e | 显示扩展信息 | netstat -e |
-i | 显示网络接口信息 | netstat -i |
-g | 显示多播组成员信息 | netstat -g |
经典案例
# 查看所有TCP连接
netstat -atn
# 查看所有UDP连接
netstat -aun
# 查看所有监听端口
netstat -tulnp
# 查看路由表
netstat -rn
# 查看网络接口统计信息
netstat -i
# 持续监控TCP连接
netstat -tcp -c 1
# 查看特定端口的连接
netstat -anp | grep 80
# 显示网络协议统计信息
netstat -s注意事项
- 需要root权限才能查看所有连接和进程信息
- 在新版Linux系统中推荐使用
ss命令替代netstat(功能更强大) -p选项可能显示不完整,特别是在容器环境中- 输出中的
TIME_WAIT状态表示TCP连接正常关闭过程 - 大量
SYN_RECV状态可能指示SYN洪水攻击 - 可以使用
watch -n 1 netstat -t实现实时监控
替代方案(ss命令)
# 基本等同于 netstat -tulnp
ss -tulnp
# 显示所有TCP连接
ss -t -a
# 显示所有UDP连接
ss -u -a虽然netstat仍然可用,但在现代Linux系统中,ss命令提供了更快的性能和更详细的信息,特别是在处理大量网络连接时。
nmap - 网络探测和安全审核工具
Nmap(Network Mapper)是一款开源的网络扫描和安全审计工具,用于发现主机和服务、检测操作系统、识别服务版本等信息。广泛应用于网络探测、安全审计和漏洞扫描。
语法格式
nmap [扫描类型] [选项] {目标规范}选项
| 选项 | 描述 | 示例 |
|---|---|---|
-sS | TCP SYN扫描(半开扫描) | nmap -sS 192.168.1.1 |
-sT | TCP连接扫描 | nmap -sT example.com |
-sU | UDP扫描 | nmap -sU 192.168.1.1 |
-O | 操作系统检测 | nmap -O 192.168.1.1 |
-sV | 服务版本检测 | nmap -sV 192.168.1.1 |
-p <端口范围> | 指定端口范围 | nmap -p 1-1000 192.168.1.1 |
-A | 激进模式(OS检测+版本检测+脚本扫描) | nmap -A 192.168.1.1 |
-T<0-5> | 设置时间模板(0最慢,5最快) | nmap -T4 192.168.1.1 |
--script <脚本> | 使用NSE脚本 | nmap --script vuln 192.168.1.1 |
-v | 增加详细程度 | nmap -v 192.168.1.1 |
经典案例
# 快速扫描常用端口
nmap -F 192.168.1.1
# 完整扫描(包括OS和服务版本检测)
nmap -A -T4 192.168.1.1
# 扫描特定端口范围
nmap -p 20-80,443,8080 192.168.1.1
# 使用脚本扫描漏洞
nmap --script vuln 192.168.1.1
# 扫描整个子网
nmap 192.168.1.0/24注意事项
- 未经授权扫描网络可能违反法律或服务条款
- 某些扫描类型(如SYN扫描)需要root权限
- 过度激进的扫描可能触发目标系统的防御机制
- 建议在测试环境中先验证扫描参数
- 注意保存扫描结果(可使用
-oN选项输出到文件)
traceroute - 网络路由追踪工具
简介
traceroute 是一种网络诊断工具,用于显示数据包从源主机到目标主机所经过的路由路径。它通过发送具有递增TTL值的探测包,并收集中间路由器的响应来实现路由追踪。
语法格式
traceroute [选项] <目标主机>选项
| 选项 | 描述 | 示例 |
|---|---|---|
-4 | 强制使用IPv4 | traceroute -4 example.com |
-6 | 强制使用IPv6 | traceroute -6 example.com |
-I | 使用ICMP ECHO请求 | traceroute -I example.com |
-T | 使用TCP SYN包 | traceroute -T example.com |
-U | 使用UDP数据包(默认) | traceroute -U example.com |
-f <ttl> | 设置起始TTL值 | traceroute -f 5 example.com |
-m <max_ttl> | 设置最大TTL值(默认30) | traceroute -m 15 example.com |
-q <n> | 每跳发送的探测包数(默认3) | traceroute -q 5 example.com |
-w <秒> | 等待响应超时时间 | traceroute -w 2 example.com |
-n | 不解析IP地址为主机名 | traceroute -n example.com |
经典案例
# 追踪到google.com的路由路径
traceroute google.com
# 使用ICMP协议追踪,不解析主机名,最多15跳
traceroute -I -n -m 15 google.com
# 追踪特定端口(80)的TCP路由
traceroute -T -p 80 example.com注意事项
- 某些网络设备可能配置为不响应ICMP/UDP探测包,导致显示为星号(*)
- 需要root权限才能使用某些特殊选项(如-T)
- 结果中的延迟时间受网络状况影响,仅供参考
- 过度使用traceroute可能被某些网络视为恶意行为
- 不同操作系统实现的traceroute可能有不同的默认行为和选项
nslookup - 域名查询工具
简介
nslookup 是一个用于查询 DNS(域名系统)记录的命令行工具,可以获取域名对应的 IP 地址、反向解析、MX 记录等信息。它支持交互式和非交互式两种模式。
语法格式
nslookup [选项] [域名] [DNS服务器]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-type=A | 查询 A 记录(IPv4 地址) | nslookup -type=A example.com |
-type=AAAA | 查询 AAAA 记录(IPv6 地址) | nslookup -type=AAAA example.com |
-type=MX | 查询邮件交换记录 | nslookup -type=MX example.com |
-type=CNAME | 查询别名记录 | nslookup -type=CNAME www.example.com |
-type=NS | 查询域名服务器记录 | nslookup -type=NS example.com |
-type=TXT | 查询 TXT 记录 | nslookup -type=TXT example.com |
-debug | 显示调试信息 | nslookup -debug example.com |
-timeout=<秒> | 设置查询超时时间 | nslookup -timeout=5 example.com |
-port=<端口> | 指定 DNS 服务器端口 | nslookup -port=5353 example.com |
经典案例
# 查询域名的 A 记录(默认)
nslookup example.com
# 查询 Google 的 DNS 记录(指定 DNS 服务器)
nslookup google.com 8.8.8.8
# 查询 MX 记录(邮件服务器)
nslookup -type=MX gmail.com
# 反向解析 IP 地址
nslookup 8.8.8.8
# 进入交互模式(输入 exit 退出)
nslookup
> server 8.8.8.8
> set type=MX
> example.com
> exit注意事项
- 在较新版本的 Linux 中,
dig和host命令更常用,nslookup已逐渐被取代。 - 如果未指定 DNS 服务器,默认使用
/etc/resolv.conf中的配置。 - 某些 DNS 服务器可能限制查询频率,频繁查询可能被屏蔽。
- 反向解析(PTR 记录)需要 IP 地址对应的 DNS 记录存在。
- 在交互模式下,可以使用
help查看可用命令。
nmcli - 网络管理命令行工具
简介
nmcli 是 NetworkManager 的命令行客户端工具,用于管理和监控网络连接。相比传统的 ifconfig 等工具,nmcli 提供了更现代化的网络配置方式,支持 WiFi、以太网、VPN 等多种连接类型。
语法格式
nmcli [OPTIONS] OBJECT { COMMAND | help }选项
| 选项 | 描述 | 示例 |
|---|---|---|
-a | 询问缺少的参数 | nmcli -a connection up |
-c | 指定输出颜色 | nmcli -c auto |
-e | 转义列分隔符 | nmcli -e on |
-f | 指定显示字段 | nmcli -f general,ip4 dev show |
-g | 简化输出格式 | nmcli -g ip4.address |
-h | 显示帮助信息 | nmcli -h |
-p | 美化输出格式 | nmcli -p |
-s | 显示密码 | nmcli -s connection show |
-t | 简洁输出模式 | nmcli -t |
-v | 显示版本信息 | nmcli -v |
经典案例
# 查看所有网络连接
nmcli connection show
# 激活有线连接
nmcli connection up eth0
# 扫描可用WiFi网络
nmcli device wifi list
# 连接到WiFi网络
nmcli device wifi connect SSID password PASSWORD
# 创建新的静态IP连接
nmcli connection add type ethernet ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1
# 查看设备状态
nmcli device status
# 修改DNS设置
nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
# 重新加载所有连接
nmcli connection reload注意事项
- 需要 NetworkManager 服务运行才能使用 nmcli
- 修改网络配置通常需要 root 权限
- 某些操作可能会导致网络连接暂时中断
- 不同 Linux 发行版的 NetworkManager 版本可能有功能差异
- 使用
nmcli general logging可以开启调试日志 - 对于复杂的网络配置,建议先测试在非生产环境
telnet - 检测网络服务和端口连通性
简介
Telnet 是一个基于文本的协议和命令行工具,用于通过网络连接到远程主机。它使用 TCP 端口 23 进行通信,但由于传输数据未加密,已逐渐被 SSH 取代。现在主要用于测试网络服务和端口连通性。
语法格式
telnet [选项] [主机名或IP地址] [端口]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-4 | 强制使用 IPv4 | telnet -4 example.com |
-6 | 强制使用 IPv6 | telnet -6 example.com |
-8 | 使用 8 位数据路径 | telnet -8 legacyhost |
-E | 禁用转义字符功能 | telnet -E 192.168.1.1 |
-a | 尝试自动登录 | telnet -a server |
-l user | 指定登录用户名 | telnet -l admin 10.0.0.1 |
经典案例
# 测试邮件服务器的25端口是否开放
telnet mail.example.com 25
# 连接到远程主机的telnet服务
telnet 192.168.1.100
# 测试HTTP服务80端口
telnet www.example.com 80
GET / HTTP/1.1
Host: www.example.com
# 检查MySQL端口3306是否可访问
telnet db-server 3306注意事项
安全警告:Telnet 以明文传输所有数据(包括密码),不要在公共网络或不安全环境中使用它进行实际管理操作。
现代 Linux 发行版可能默认不安装 telnet 客户端,需要手动安装:
bash# Debian/Ubuntu sudo apt install telnet # RHEL/CentOS sudo yum install telnet要测试 telnet 服务是否运行,可以在本地使用:
bashtelnet localhost退出 telnet 会话通常使用组合键
Ctrl+]然后输入quit。对于生产环境的管理操作,强烈建议使用 SSH 替代 telnet。
ssh-keygen - 生成SSH密钥对工具
简介
ssh-keygen 是用于生成、管理和转换 SSH 认证密钥的命令行工具。它支持 RSA、DSA、ECDSA 和 Ed25519 等多种加密算法,是建立安全 SSH 连接的基础工具。
语法格式
ssh-keygen [选项] [-t key_type] [-b bits] [-f output_keyfile] [-C comment]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-t type | 指定密钥类型(rsa/dsa/ecdsa/ed25519) | -t ed25519 |
-b bits | 指定密钥位数(RSA默认2048) | -b 4096 |
-f file | 指定密钥文件输出路径 | -f ~/.ssh/id_rsa |
-C comment | 添加密钥注释(通常用邮箱) | -C "user@example.com" |
-p | 更改密钥密码短语 | -p -f ~/.ssh/id_rsa |
-N new_passphrase | 设置新密码短语 | -N "mypassword" |
-e | 导出密钥为其他格式 | -e -f ~/.ssh/id_rsa.pub |
-y | 从私钥生成公钥 | -y -f ~/.ssh/id_rsa |
加密算法
| 加密算法 | 说明 |
|---|---|
| rsa | 兼容性最好,但性能较低,密钥长度:默认 3072 位(推荐 ≥2048,安全临界值为 4096)-b 4096指定长度 |
| ed25519 | 安全性高,性能最优,密钥长度短,密钥长度:固定 256 位 |
| ecdsa | 比 RSA 更高效,密钥尺寸更小,密钥长度:256/384/521 位。-b 384指定长度 |
| dsa(已淘汰) | OpenSSH 7.0+ 已默认禁用,存在安全性问题,密钥长度:固定 1024 位 |
经典案例
# 生成ED25519密钥对(推荐)
ssh-keygen -t ed25519 -C "admin@server" -f ~/.ssh/server_key
# 生成4096位RSA密钥
ssh-keygen -t rsa -b 4096 -C "backup@example.com"
# 为现有私钥生成公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
# 批量生成无密码密钥对(自动化场景)
ssh-keygen -t rsa -b 2048 -N "" -f /tmp/auto_key注意事项
安全建议:
- ED25519 算法比 RSA 更安全高效,优先考虑使用
- 生产环境 RSA 密钥长度不应小于 2048 位
- 避免使用无密码密钥,若必须使用需严格限制访问权限
文件权限:
bashchmod 600 ~/.ssh/id_rsa # 私钥权限 chmod 644 ~/.ssh/id_rsa.pub # 公钥权限生成authorized_keys
bashcat ~/.ssh/id_rsa.pub > authorized_keys密钥管理:
- 定期轮换密钥(建议每6-12个月)
- 不同服务应使用不同密钥对
- 删除不再使用的密钥对
ssh-copy-id - 将公钥复制到远程主机的工具
简介
ssh-copy-id 是一个便捷工具,用于将本地 SSH 公钥安装到远程主机的 authorized_keys 文件中,实现免密码 SSH 登录。它自动处理权限设置和文件创建,是配置 SSH 密钥认证的标准方法。
语法格式
ssh-copy-id [-i [identity_file]] [-p port] [-f] [-n] [-o ssh_option] [user@]hostname选项
| 选项 | 描述 | 示例 |
|---|---|---|
-i identity_file | 指定要复制的公钥文件 | -i ~/.ssh/id_ed25519.pub |
-p port | 指定远程主机的SSH端口 | -p 2222 |
-f | 强制模式,不检查密钥是否已存在 | -f |
-n | 试运行,显示操作但不实际执行 | -n |
-o ssh_option | 传递SSH客户端选项 | -o "StrictHostKeyChecking=no" |
-h | 显示帮助信息 | -h |
经典案例
# 基本用法(使用默认~/.ssh/id_rsa.pub)
ssh-copy-id user@remote-server
# 指定非标准端口和密钥文件
ssh-copy-id -i ~/.ssh/work_key.pub -p 2222 admin@192.168.1.100
# 首次连接时跳过主机密钥检查
ssh-copy-id -o "StrictHostKeyChecking=no" dev@cloud-instance
# 多服务器批量部署(结合循环)
for server in web{1..3}.example.com; do
ssh-copy-id -i ~/.ssh/deploy_key.pub sysadmin@$server
done注意事项
- 前置要求:
- 本地必须已有 SSH 密钥对(可通过
ssh-keygen生成) - 需要知道远程主机的登录密码(用于首次认证)
- 本地必须已有 SSH 密钥对(可通过
- 文件权限:
- 远程主机的
~/.ssh目录权限应为 700 authorized_keys文件权限应为 600
- 远程主机的
scp - 安全文件传输工具
简介
scp(Secure Copy Protocol)是基于 SSH 的安全文件传输命令,用于在本地主机和远程主机之间或两个远程主机之间加密传输文件。它利用 SSH 进行身份验证和数据加密,是替代传统 FTP 的安全选择。
语法格式
scp [选项] [[user@]host1:]file1 ... [[user@]host2:]file2选项
| 选项 | 描述 | 示例 |
|---|---|---|
-P port | 指定远程主机的SSH端口 | -P 2222 |
-p | 保留文件原始属性(修改时间、权限等) | -p |
-r | 递归复制整个目录 | -r |
-C | 启用压缩传输 | -C |
-q | 静默模式,不显示进度和警告 | -q |
-i identity_file | 指定密钥文件 | -i ~/.ssh/id_ed25519 |
-l limit | 限制带宽(单位:Kbit/s) | -l 1024 |
-v | 显示详细调试信息 | -v |
经典案例
# 本地文件复制到远程主机
scp backup.tar.gz user@remote:/opt/backups/
# 从远程主机下载文件(指定端口)
scp -P 2222 admin@server:/var/log/app.log /tmp/
# 目录递归传输(保留属性)
scp -rpC ~/website root@192.168.1.10:/var/www/
# 两台远程主机间传输(通过本地中转)
scp user1@host1:/data/file user2@host2:/backup/
# 使用非标准密钥传输
scp -i ~/.ssh/deploy_key -P 2222 app.conf deploy@prod:/etc/app/注意事项
性能优化
bash# 大文件传输建议组合使用这些选项 scp -Cp -l 2048 large_file.iso user@remote:/storage/安全限制
- 默认使用 SSH 协议(端口 22)
- 防火墙需放行相关端口
- 建议配合 SSH 密钥认证使用
替代方案
bash# 更现代的替代工具(支持断点续传) rsync -avzP -e "ssh -p 2222" source/ user@host:dest/特殊场景处理
bash# 包含空格的文件名需要转义 scp "My\\ Documents/file.txt" remote:~/ # 使用通配符时需要先在本地展开 scp *.log remote:/logs/
sshpass - 非交互式SSH密码认证工具
简介
sshpass 是一个用于非交互式SSH密码认证的工具,可以在命令行中直接提供SSH密码,实现自动化脚本中的密码认证。它通过标准输入或环境变量传递密码,绕过了SSH默认的交互式密码提示。
语法格式
sshpass [-f filename | -d num | -p password | -e] [ssh options] command选项
| 选项 | 描述 | 示例 |
|---|---|---|
-p password | 直接在命令行指定密码 | -p "myp@ss123" |
-f filename | 从文件读取密码(第一行) | -f /etc/sshpass.txt |
-e | 从环境变量SSHPASS读取密码 | -e |
-d num | 使用文件描述符num获取密码 | -d 3 |
-P prompt | 设置密码提示字符串匹配模式 | -P "password:" |
-v | 显示详细调试信息 | -v |
源码编译
yum -y install gcc
wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
# 或者
curl -L -o sshpass-1.10.tar.gz https://sourceforge.net/projects/sshpass/files/sshpass/1.10/sshpass-1.10.tar.gz/download
# 解压
tar -xvf sshpass-1.10.tar.gz
# 进入目录
cd sshpass-*
# 预配置
./configure --prefix=/opt/sshpass
# 编译并安装
make && make install
cp /opt/sshpass/sshpass /usr/bin/经典案例
# 基本用法(明文密码)
sshpass -p 's3cret' ssh user@remote-host "ls -l /tmp"
# 从文件读取密码(更安全)
echo 's3cret' > pass.txt
chmod 600 pass.txt
sshpass -f pass.txt ssh -p 2222 admin@server
# 环境变量方式(推荐用于脚本)
export SSHPASS='s3cret'
sshpass -e scp file.txt user@remote:~/
# 结合rsync使用
sshpass -p 'password' rsync -avz -e ssh /local/dir/ user@remote:/remote/dir/
# 批量执行命令(自动化运维)
for host in {1..5}; do
sshpass -p 'pass123' ssh -o StrictHostKeyChecking=no user@node$host "uptime"
done注意事项
安全警告:
- 命令行中的密码可能会被其他用户通过
ps命令查看 - 密码文件必须设置严格权限(600)
- 生产环境建议优先使用SSH密钥认证
- 命令行中的密码可能会被其他用户通过
最佳实践:
bash# 使用后立即清除环境变量 export SSHPASS='password' sshpass -e ssh user@host unset SSHPASS # 或者使用临时文件 temp_pass=$(mktemp) echo 'password' > $temp_pass sshpass -f $temp_pass ssh user@host rm -f $temp_pass安装说明:
bash# Ubuntu/Debian sudo apt install sshpass # RHEL/CentOS sudo yum install sshpass # macOS brew install hudochenkov/sshpass/sshpass替代方案:
bash# 使用expect脚本(更灵活但更复杂) # 使用SSH密钥认证(更安全) # 使用Ansible等配置管理工具
rsync - 远程文件同步工具
简介
rsync 是一个功能强大的文件同步工具,支持本地和远程文件同步。它通过差异算法仅传输变化的文件部分,显著提高传输效率。广泛用于备份、镜像和部署场景。
语法格式
rsync [OPTION]... SRC [SRC]... DEST选项
| 选项 | 描述 | 示例 |
|---|---|---|
-a | 归档模式(保留权限、时间戳等) | rsync -a /src/ /dest/ |
-v | 显示详细输出 | rsync -av /src/ user@host:/dest/ |
-z | 压缩传输数据 | rsync -az /src/ user@host:/dest/ |
-h | 人类可读格式输出 | rsync -ah /src/ /dest/ |
--delete | 删除目标端多余文件 | rsync -a --delete /src/ /dest/ |
-P | 显示进度并支持断点续传 | rsync -aP /src/ user@host:/dest/ |
-e ssh | 指定远程shell | rsync -av -e "ssh -p 2222" /src/ user@host:/dest/ |
--exclude=PATTERN | 排除匹配文件 | rsync -a --exclude='*.tmp' /src/ /dest/ |
--bwlimit=RATE | 限制传输带宽(KB/s) | rsync -a --bwlimit=100 /src/ user@host:/dest/ |
--password-file=FILE | 指定包含密码的文件路径 | rsync --password-file=/etc/rsync.pass |
--daemon | 以守护进程模式运行 | rsync --daemon --password-file=/etc/rsync.pass |
--port=PORT | 指定rsync守护进程端口 | rsync --port=8730 --password-file=pass.txt |
--link-dest | 保持硬链接关系 | rsync -avz --link-dest=/backup/previous_backup/ |
经典案例
# 本地目录同步(保留所有属性)
rsync -av /data/backups/ /mnt/backup/
# 远程同步到本地(使用SSH加密)
rsync -avz -e ssh user@example.com:/var/www/ /local/backup/
# 镜像同步(删除目标端多余文件)
rsync -av --delete /src/ /dest/
# 排除特定文件类型
rsync -av --exclude='*.log' --exclude='temp/' /src/ user@host:/dest/
# 限速传输(100KB/s)
rsync -av --bwlimit=100 /largefiles/ user@host:/backup/
# 使用密码文件从远程同步(rsync协议)
rsync -av --password-file=/etc/rsync.secret rsync://user@host/share/ /local/path/
# 守护进程模式使用密码文件
rsync --daemon --config=/etc/rsyncd.conf --password-file=/etc/rsyncd.secret
# 限制权限的密码文件(权限必须为600)
chmod 600 /etc/rsync.pass
rsync -av --password-file=/etc/rsync.pass user@host::module /dest注意事项
- 路径结尾的
/很重要:/src/表示同步目录内容,/src表示同步目录本身 - 使用
--dry-run选项可先测试而不实际执行 - 远程同步建议使用
-z压缩选项减少网络流量 - 生产环境建议结合
screen或tmux使用,防止会话中断 - 注意
--delete选项会删除目标端多余文件,使用前务必确认 - 密码文件权限必须设为600,否则rsync会拒绝使用
- 密码文件内容格式:纯密码文本(无用户名)或"username:password"格式
curl - 数据传输工具
简介
curl 是一个用于传输数据的命令行工具,支持多种协议(HTTP/HTTPS/FTP/FTPS等)。它能够与服务器进行交互,获取或发送数据,常用于测试API、下载文件等场景。
语法格式
curl [options] [URL...]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-o <file> | 将输出写入到指定文件 | curl -o example.html http://example.com |
-O | 将输出写入到文件,文件名从URL中提取 | curl -O http://example.com/file.txt |
-d <data> | 发送POST请求数据 | curl -d "name=value" http://example.com |
-H <header> | 添加HTTP请求头 | curl -H "Content-Type: application/json" http://example.com |
-X <method> | 指定HTTP请求方法 | curl -X DELETE http://example.com/resource |
-u <user:password> | 指定用户名和密码 | curl -u user:pass http://example.com |
-L | 跟随重定向 | curl -L http://example.com |
-v | 显示详细操作信息 | curl -v http://example.com |
-s | 静默模式,不显示进度或错误信息 | curl -s http://example.com |
-k | 允许不安全的SSL连接 | curl -k https://example.com |
经典案例
# 下载文件
curl -O https://example.com/file.zip
# 发送POST请求
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/endpoint
# 测试API响应时间
curl -o /dev/null -s -w 'Total: %{time_total}s\n' https://api.example.com
# 使用基本认证访问
curl -u username:password https://protected.example.com注意事项
- 使用
-k选项会忽略SSL证书验证,存在安全风险,仅建议在测试环境中使用 - 大量下载时注意带宽限制,可使用
--limit-rate限制速度 - POST请求时注意设置正确的Content-Type头
- 处理敏感数据时建议使用
.netrc文件存储凭证而非命令行参数 - 某些服务器可能会限制curl的User-Agent,可通过
-A选项修改
iptables - Linux 内核防火墙配置工具
iptables 是 Linux 系统中基于内核 netfilter 框架的用户空间命令行工具,用于配置、维护和检查 IPv4 数据包过滤规则,实现网络流量控制、地址转换(NAT)和数据包修改等功能。它是 Linux 防火墙的核心组件,广泛用于服务器安全、访问控制和网络管理。
语法格式
iptables [-t 表名] 命令 [链名] [匹配条件] [-j 目标动作]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-t table | 指定要操作的表(如 filter, nat, mangle, raw),默认为 filter 表 | iptables -t nat -L |
-A chain | 追加规则到指定链的末尾 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
-D chain [rulenum] | 删除指定链中的规则(可按规则编号或完整规则删除) | iptables -D INPUT 1(删除第1条规则) |
-I chain [rulenum] | 插入规则到指定链的指定位置(默认为链首) | iptables -I INPUT 2 -s 192.168.1.0/24 -j ACCEPT |
-L [chain] | 列出指定链或所有链的规则 | iptables -L -v -n(详细数字格式显示) |
-F [chain] | 清空指定链或所有链的规则 | iptables -F INPUT |
-P chain target | 设置链的默认策略(如 ACCEPT, DROP, REJECT) | iptables -P INPUT DROP |
-s address[/mask] | 匹配源 IP 地址或网段 | iptables -A INPUT -s 192.168.1.10 -j DROP |
-d address[/mask] | 匹配目标 IP 地址或网段 | iptables -A OUTPUT -d 10.0.0.0/8 -j REJECT |
-p protocol | 匹配协议类型(如 tcp, udp, icmp, all) | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
--dport port | 匹配目标端口(需结合 -p tcp 或 -p udp) | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
--sport port | 匹配源端口(需结合 -p tcp 或 -p udp) | iptables -A OUTPUT -p udp --sport 53 -j ACCEPT |
-i interface | 匹配输入网络接口(如 eth0, lo) | iptables -A INPUT -i eth0 -j ACCEPT |
-o interface | 匹配输出网络接口 | iptables -A OUTPUT -o wlan0 -j DROP |
-j target | 指定规则匹配后的动作(如 ACCEPT, DROP, REJECT, LOG, DNAT, SNAT) | iptables -A FORWARD -j DROP |
-m module | 使用扩展模块(如 state, conntrack, multiport, limit) | iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
经典案例
# 1. 查看当前规则(以数字格式显示详细信息)
iptables -L -n -v
# 2. 允许 SSH(22端口)访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 3. 允许本地回环接口(lo)通信
iptables -A INPUT -i lo -j ACCEPT
# 4. 允许已建立的连接及相关连接通过
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 5. 拒绝来自特定 IP(如 192.168.1.100)的所有流量
iptables -A INPUT -s 192.168.1.100 -j DROP
# 6. 设置端口转发(将公网 8080 端口转发到内网 192.168.1.50:80)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.50:80
iptables -A FORWARD -p tcp -d 192.168.1.50 --dport 80 -j ACCEPT
# 7. 启用 NAT 伪装(内网通过公网接口 eth0 上网)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 8. 记录被拒绝的包到日志(前缀标记 "IPTables-Dropped:")
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
# 9. 保存规则到文件(重启后失效,需手动保存)
iptables-save > /etc/iptables/rules.v4
# 10. 从文件恢复规则
iptables-restore < /etc/iptables/rules.v4注意事项
- 权限要求:iptables 需 root 权限运行(使用
sudo或 root 用户)。 - 规则顺序:规则按顺序匹配,第一条匹配的规则生效。建议将允许规则放在拒绝规则之前。
- 默认策略:设置默认策略(如
iptables -P INPUT DROP)前需确保允许管理连接(如 SSH),否则可能导致服务器无法远程访问。 - 保存规则:iptables 规则默认内存中生效,重启后丢失。需使用
iptables-save持久化保存(不同发行版路径可能不同)。 - 危险操作:
iptables -F会清空所有规则,若默认策略为DROP可能导致网络中断。iptables -P INPUT DROP会拒绝所有输入流量,需提前放行必要服务。 - 性能影响:复杂规则或大量连接跟踪可能消耗 CPU 和内存。建议使用
-m state或-m conntrack优化已建立连接的处理。 - 替代工具:现代 Linux 系统推荐使用
nftables或firewalld(基于 iptables 的抽象层),提供更简化的管理。
iptables 是 Linux 网络安全的基石,掌握其用法可有效加固服务器。建议在测试环境验证规则后再应用于生产环境。更多扩展功能(如 IP 集、时间控制)可参考官方文档。
