Appearance
ping – 测试主机间网络连通性
ping
(Packet Internet Groper)是用于测试网络连接性的基础工具,通过发送 ICMP回显请求 数据包到目标主机,并等待其返回回显应答。
语法格式
bash
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. 基本连通性测试
bash
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
等命令。它提供了更强大的功能和更一致的语法。
语法格式
bash
ip [ OPTIONS ] OBJECT { COMMAND | help }
选项
选项 | 说明 |
---|---|
-s, -stats | 显示详细统计信息 |
-d, -details | 显示详细信息 |
-c, -color | 彩色输出 |
-4 | 仅IPv4 |
-6 | 仅IPv6 |
-h, -human | 人类可读格式 |
经典案例
bash
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
配置)
语法格式
bash
ifup <接口名> [选项]
选项
选项 | 作用 |
---|---|
-a | 激活所有配置为 auto 的接口 |
--force | 强制激活(即使接口已启用) |
-v | 显示详细操作信息 |
经典案例
bash
ifup eth0 # 激活 eth0 接口
ifup -a # 激活所有自动配置的接口
ifup --force wlan0 # 强制重新激活已启用的 wlan0
ifdown - 停止网卡
停用指定的网络接口(根据 /etc/network/interfaces
配置
语法格式
bash
ifdown <接口名> [选项]
选项
选项 | 作用 |
---|---|
-a | 停用所有配置为 auto 的接口 |
--force | 强制停用(即使有其他依赖) |
-v | 显示详细操作信息 |
经典案例
bash
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等高级参数
语法格式
bash
ifconfig [接口名] [选项] [地址参数]
选项
选项 | 说明 |
---|---|
up | 激活网络接口 |
down | 禁用网络接口 |
netmask | 设置子网掩码 |
broadcast | 设置广播地址 |
hw | 设置硬件地址(MAC) |
mtu | 设置最大传输单元 |
-a | 显示所有接口(包括未激活的) |
经典案例
bash
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/Unix 系统中用于显示网络连接、路由表、接口统计等网络相关信息的经典工具。它属于 网络诊断工具 类别,是排查网络问题的瑞士军刀。
语法格式
bash
netstat [选项]
选项
选项 | 作用 |
---|---|
-a | 显示所有连接(包括监听和非监听) |
-t | 仅显示 TCP 连接 |
-u | 仅显示 UDP 连接 |
-n | 以数字形式显示地址和端口(禁用 DNS 解析) |
-l | 仅显示监听状态的连接 |
-p | 显示进程 ID 和程序名称 |
-r | 显示路由表(同 route -n ) |
-s | 显示网络统计信息(如丢包、错误等) |
-e | 显示扩展信息(如用户、Inode 等) |
经典案例
bash
netstat -atn # 查看所有 TCP 连接
netstat -tuln # 查看所有监听端口
netstat -tulnp # 查看进程使用的端口
netstat -i # 统计网络接口流量
nmap - 网络探测和安全审核工具
Nmap(Network Mapper)是一款开源的网络扫描和安全审计工具,用于发现主机和服务、检测操作系统、识别服务版本等信息。广泛应用于网络探测、安全审计和漏洞扫描。
语法格式
bash
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 |
经典案例
bash
# 快速扫描常用端口
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
选项输出到文件)
vmstat - 虚拟内存统计监控工具
简介
vmstat(Virtual Memory Statistics)是Linux系统中用于监控系统虚拟内存、进程、CPU活动等性能数据的命令行工具。它能实时显示系统的内存使用情况、进程状态、CPU利用率、磁盘IO等关键指标,是系统性能分析和故障排查的重要工具。
语法格式
bash
vmstat [选项] [时间间隔] [次数]
选项
选项 | 描述 | 示例 |
---|---|---|
-a | 显示活跃和非活跃内存 | vmstat -a |
-f | 显示系统启动后的fork次数 | vmstat -f |
-m | 显示slabinfo信息 | vmstat -m |
-n | 不自动更新标题行 | vmstat -n 1 5 |
-s | 显示内存统计事件计数器 | vmstat -s |
-d | 显示磁盘统计信息 | vmstat -d |
-p 分区 | 显示指定分区统计信息 | vmstat -p /dev/sda1 |
-S 单位 | 指定内存显示单位(k/K/m/M) | vmstat -S M |
-t | 在输出中增加时间戳 | vmstat -t 1 |
-w | 宽输出模式 | vmstat -w |
输出字段解析
bash
# 示例输出(vmstat 1 3)
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 279868 210332 1390760 0 0 2 1 42 56 1 1 98 0 0
0 0 0 279868 210332 1390760 0 0 0 0 44 60 0 1 99 0 0
2 0 0 279868 210332 1390760 0 0 0 0 42 55 1 1 98 0 0
Procs(进程)
列 | 字段 | 描述 |
---|---|---|
1 | r | 运行队列中的进程数(正在运行或等待CPU的进程) |
2 | b | 处于不可中断睡眠状态的进程数(通常是等待I/O) |
Memory(内存)
列 | 字段 | 描述 |
---|---|---|
3 | swpd | 使用的虚拟内存大小(KB) |
4 | free | 空闲的物理内存大小(KB) |
5 | buff | 用作缓冲区的内存大小(KB) |
6 | cache | 用作缓存的内存大小(KB) |
Swap(交换区)
列 | 字段 | 描述 |
---|---|---|
7 | si | 每秒从磁盘读入的内存大小(KB/s,swap in) |
8 | so | 每秒写入磁盘的内存大小(KB/s,swap out) |
IO(磁盘)
列 | 字段 | 描述 |
---|---|---|
9 | bi | 每秒从块设备接收的块数(blocks/s) |
10 | bo | 每秒发送到块设备的块数(blocks/s) |
System(系统)
列 | 字段 | 描述 |
---|---|---|
11 | in | 每秒中断次数(包括时钟中断) |
12 | cs | 每秒上下文切换次数 |
CPU(处理器)
列 | 字段 | 描述 |
---|---|---|
13 | us | 用户进程占用CPU时间百分比 |
14 | sy | 系统进程占用CPU时间百分比 |
15 | id | 空闲CPU时间百分比 |
16 | wa | 等待I/O的CPU时间百分比 |
17 | st | 被虚拟机偷取的时间百分比(虚拟化环境) |
经典案例
bash
# 每2秒刷新一次,共刷新5次
vmstat 2 5
# 监控系统内存和CPU使用情况(MB单位显示)
vmstat -S M 1
# 显示磁盘IO统计信息
vmstat -d
# 结合watch命令持续监控
watch -n 1 vmstat
注意事项
- 不带参数运行时,vmstat显示自系统启动以来的平均统计
- 第一个时间间隔的数值是自系统启动以来的平均值
- 在高负载系统中,vmstat本身可能会影响性能数据
- 分析结果时要重点关注:
- r(运行队列)持续大于CPU核心数
- b(阻塞进程数)持续不为0
- si/so(内存交换)持续不为0
- 建议在性能分析时结合其他工具如top、iostat等一起使用
traceroute - 网络路由追踪工具
简介
traceroute 是一种网络诊断工具,用于显示数据包从源主机到目标主机所经过的路由路径。它通过发送具有递增TTL值的探测包,并收集中间路由器的响应来实现路由追踪。
语法格式
bash
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 |
经典案例
bash
# 追踪到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 记录等信息。它支持交互式和非交互式两种模式。
语法格式
bash
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 |
经典案例
bash
# 查询域名的 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 等多种连接类型。
语法格式
bash
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 |
经典案例
bash
# 查看所有网络连接
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 取代。现在主要用于测试网络服务和端口连通性。
语法格式
bash
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 |
经典案例
bash
# 测试邮件服务器的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 连接的基础工具。
语法格式
bash
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 位 |
经典案例
bash
# 生成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 密钥认证的标准方法。
语法格式
bash
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 |
经典案例
bash
# 基本用法(使用默认~/.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 的安全选择。
语法格式
bash
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 |
经典案例
bash
# 本地文件复制到远程主机
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默认的交互式密码提示。
语法格式
bash
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 |
源码编译
bash
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/
经典案例
bash
# 基本用法(明文密码)
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 是一个功能强大的文件同步工具,支持本地和远程文件同步。它通过差异算法仅传输变化的文件部分,显著提高传输效率。广泛用于备份、镜像和部署场景。
语法格式
bash
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/ |
经典案例
bash
# 本地目录同步(保留所有属性)
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、下载文件等场景。
语法格式
bash
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 |
经典案例
bash
# 下载文件
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
选项修改