当前可用熵值可执行 cat /proc/sys/kernel/random/entropy_avail 查看,低于100易致 /dev/random 阻塞,影响SSH、TLS等;/dev/random 会阻塞等待熵积累,/dev/urandom 不阻塞且现代系统已安全。

Linux 系统可用熵值通常低于 200 就算偏低,持续低于 100 会导致 /dev/random 阻塞,影响 SSH 登录、TLS 握手、密钥生成等关键操作。
怎么快速查当前可用熵值
最直接的方式是读取内核接口:
- 执行
cat /proc/sys/kernel/random/entropy_avail—— 返回一个整数,比如142,这就是当前可用熵池比特数 - 对比参考值:
min=100(开始有风险)、ideal=256+(较宽松场景)、300+(高并发 TLS 或频繁密钥生成环境) - 别用
dd if=/dev/random ...测试,它会真的阻塞,不是“查看”,是“消耗”
为什么 /dev/random 和 /dev/urandom 表现不同
核心区别不在“质量”,而在“是否等待重估”:
-
/dev/random在熵池低于阈值时直接休眠,直到内核认为采集够了——这是阻塞根源 -
/dev/urandom仅在启动初期依赖熵池,之后用 CSPRNG 持续输出,不阻塞,现代 Linux(≥5.6)已默认安全 - OpenSSL、GnuTLS 等默认优先用
/dev/urandom;只有显式调用getrandom(2)且带GRND_RANDOM标志才会触发阻塞 - 验证方式:运行
strace -e trace=getrandom openssl rand -hex 16 2>&1 | grep getrandom,看是否返回-1 EAGAIN
熵不够时的临时缓解和长期补救
临时顶住不挂,和根治要分开处理:
- 立即缓解:
sudo apt install haveged(Debian/Ubuntu)或sudo yum install haveged(RHEL/CentOS),然后sudo systemctl enable --now haveged—— 它用 CPU 时间戳等硬件噪声注入熵池 - 云环境特别注意:KVM/Xen 虚拟机常缺硬件随机源,确认是否启用
virtio-rng设备(lscpu | grep RNG或检查/sys/devices/virtual/misc/hwrng/rng_available) - 别手动 echo 数字进
/proc/sys/kernel/random/entropy_avail—— 内核禁止写入,会报Permission denied - 容器内熵不足?宿主机熵够但容器隔离了
/dev/random访问权限,需加--device /dev/random:/dev/random:rw或改用/dev/urandom
熵值不是越高越好,而是要稳在阈值之上;真正难的是判断“谁在耗熵”——比如某个服务每秒生成 RSA 密钥,比 haveged 更值得先砍掉。









