Skip to content

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软件包提供的现代网络配置工具,用于替代传统的ifconfigroute等命令。它提供了更强大的功能和更一致的语法。

语法格式

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

注意事项

  1. 依赖关系:停用接口会断开所有相关网络连接

  2. 配置文件:需与 /etc/network/interfaces 中的配置匹配

  3. 系统兼容性

    • 旧版系统(Debian/Ubuntu):直接使用

    • 新版系统(使用 NetworkManager):可能需要先禁用 NM 管理:

      bash
      sudo 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 [扫描类型] [选项] {目标规范}

选项

选项描述示例
-sSTCP SYN扫描(半开扫描)nmap -sS 192.168.1.1
-sTTCP连接扫描nmap -sT example.com
-sUUDP扫描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

注意事项

  1. 未经授权扫描网络可能违反法律或服务条款
  2. 某些扫描类型(如SYN扫描)需要root权限
  3. 过度激进的扫描可能触发目标系统的防御机制
  4. 建议在测试环境中先验证扫描参数
  5. 注意保存扫描结果(可使用-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(进程)

字段描述
1r运行队列中的进程数(正在运行或等待CPU的进程)
2b处于不可中断睡眠状态的进程数(通常是等待I/O)

Memory(内存)

字段描述
3swpd使用的虚拟内存大小(KB)
4free空闲的物理内存大小(KB)
5buff用作缓冲区的内存大小(KB)
6cache用作缓存的内存大小(KB)

Swap(交换区)

字段描述
7si每秒从磁盘读入的内存大小(KB/s,swap in)
8so每秒写入磁盘的内存大小(KB/s,swap out)

IO(磁盘)

字段描述
9bi每秒从块设备接收的块数(blocks/s)
10bo每秒发送到块设备的块数(blocks/s)

System(系统)

字段描述
11in每秒中断次数(包括时钟中断)
12cs每秒上下文切换次数

CPU(处理器)

字段描述
13us用户进程占用CPU时间百分比
14sy系统进程占用CPU时间百分比
15id空闲CPU时间百分比
16wa等待I/O的CPU时间百分比
17st被虚拟机偷取的时间百分比(虚拟化环境)

经典案例

bash
# 每2秒刷新一次,共刷新5次
vmstat 2 5

# 监控系统内存和CPU使用情况(MB单位显示)
vmstat -S M 1

# 显示磁盘IO统计信息
vmstat -d

# 结合watch命令持续监控
watch -n 1 vmstat

注意事项

  1. 不带参数运行时,vmstat显示自系统启动以来的平均统计
  2. 第一个时间间隔的数值是自系统启动以来的平均值
  3. 在高负载系统中,vmstat本身可能会影响性能数据
  4. 分析结果时要重点关注:
    • r(运行队列)持续大于CPU核心数
    • b(阻塞进程数)持续不为0
    • si/so(内存交换)持续不为0
  5. 建议在性能分析时结合其他工具如top、iostat等一起使用

traceroute - 网络路由追踪工具

简介

traceroute 是一种网络诊断工具,用于显示数据包从源主机到目标主机所经过的路由路径。它通过发送具有递增TTL值的探测包,并收集中间路由器的响应来实现路由追踪。

语法格式

bash
traceroute [选项] <目标主机>

选项

选项描述示例
-4强制使用IPv4traceroute -4 example.com
-6强制使用IPv6traceroute -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

注意事项

  1. 某些网络设备可能配置为不响应ICMP/UDP探测包,导致显示为星号(*)
  2. 需要root权限才能使用某些特殊选项(如-T)
  3. 结果中的延迟时间受网络状况影响,仅供参考
  4. 过度使用traceroute可能被某些网络视为恶意行为
  5. 不同操作系统实现的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

注意事项

  1. 在较新版本的 Linux 中,dighost 命令更常用,nslookup 已逐渐被取代。
  2. 如果未指定 DNS 服务器,默认使用 /etc/resolv.conf 中的配置。
  3. 某些 DNS 服务器可能限制查询频率,频繁查询可能被屏蔽。
  4. 反向解析(PTR 记录)需要 IP 地址对应的 DNS 记录存在。
  5. 在交互模式下,可以使用 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

注意事项

  1. 需要 NetworkManager 服务运行才能使用 nmcli
  2. 修改网络配置通常需要 root 权限
  3. 某些操作可能会导致网络连接暂时中断
  4. 不同 Linux 发行版的 NetworkManager 版本可能有功能差异
  5. 使用 nmcli general logging 可以开启调试日志
  6. 对于复杂的网络配置,建议先测试在非生产环境

telnet - 检测网络服务和端口连通性

简介

Telnet 是一个基于文本的协议和命令行工具,用于通过网络连接到远程主机。它使用 TCP 端口 23 进行通信,但由于传输数据未加密,已逐渐被 SSH 取代。现在主要用于测试网络服务和端口连通性。

语法格式

bash
telnet [选项] [主机名或IP地址] [端口]

选项

选项描述示例
-4强制使用 IPv4telnet -4 example.com
-6强制使用 IPv6telnet -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

注意事项

  1. 安全警告:Telnet 以明文传输所有数据(包括密码),不要在公共网络或不安全环境中使用它进行实际管理操作。

  2. 现代 Linux 发行版可能默认不安装 telnet 客户端,需要手动安装:

    bash
    # Debian/Ubuntu
    sudo apt install telnet
    
    # RHEL/CentOS
    sudo yum install telnet
  3. 要测试 telnet 服务是否运行,可以在本地使用:

    bash
    telnet localhost
  4. 退出 telnet 会话通常使用组合键 Ctrl+] 然后输入 quit

  5. 对于生产环境的管理操作,强烈建议使用 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

注意事项

  1. 安全建议

    • ED25519 算法比 RSA 更安全高效,优先考虑使用
    • 生产环境 RSA 密钥长度不应小于 2048 位
    • 避免使用无密码密钥,若必须使用需严格限制访问权限
  2. 文件权限

    bash
    chmod 600 ~/.ssh/id_rsa      # 私钥权限
    chmod 644 ~/.ssh/id_rsa.pub  # 公钥权限
  3. 生成authorized_keys

    bash
    cat ~/.ssh/id_rsa.pub > authorized_keys
  4. 密钥管理

    • 定期轮换密钥(建议每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

注意事项

  1. 前置要求:
    • 本地必须已有 SSH 密钥对(可通过 ssh-keygen 生成)
    • 需要知道远程主机的登录密码(用于首次认证)
  2. 文件权限:
    • 远程主机的 ~/.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/

注意事项

  1. 性能优化

    bash
    # 大文件传输建议组合使用这些选项
    scp -Cp -l 2048 large_file.iso user@remote:/storage/
  2. 安全限制

    • 默认使用 SSH 协议(端口 22)
    • 防火墙需放行相关端口
    • 建议配合 SSH 密钥认证使用
  3. 替代方案

    bash
    # 更现代的替代工具(支持断点续传)
    rsync -avzP -e "ssh -p 2222" source/ user@host:dest/
  4. 特殊场景处理

    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

注意事项

  1. 安全警告:

    • 命令行中的密码可能会被其他用户通过ps命令查看
    • 密码文件必须设置严格权限(600)
    • 生产环境建议优先使用SSH密钥认证
  2. 最佳实践:

    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
  3. 安装说明:

    bash
    # Ubuntu/Debian
    sudo apt install sshpass
    
    # RHEL/CentOS
    sudo yum install sshpass
    
    # macOS
    brew install hudochenkov/sshpass/sshpass
  4. 替代方案:

    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指定远程shellrsync -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

注意事项

  1. 路径结尾的/很重要:/src/表示同步目录内容,/src表示同步目录本身
  2. 使用--dry-run选项可先测试而不实际执行
  3. 远程同步建议使用-z压缩选项减少网络流量
  4. 生产环境建议结合screentmux使用,防止会话中断
  5. 注意--delete选项会删除目标端多余文件,使用前务必确认
  6. 密码文件权限必须设为600,否则rsync会拒绝使用
  7. 密码文件内容格式:纯密码文本(无用户名)或"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

注意事项

  1. 使用-k选项会忽略SSL证书验证,存在安全风险,仅建议在测试环境中使用
  2. 大量下载时注意带宽限制,可使用--limit-rate限制速度
  3. POST请求时注意设置正确的Content-Type头
  4. 处理敏感数据时建议使用.netrc文件存储凭证而非命令行参数
  5. 某些服务器可能会限制curl的User-Agent,可通过-A选项修改