基础设施-SSH连接-SSH警告信息混入管道输出导致SQL文件损坏
问题现象
- 使用
ssh news "mysqldump ..." > dump.sql导出服务器数据库 - 执行
mysql < dump.sql导入时报错:ERROR 1064: syntax error near '** WARNING: connection is not using a post-quantum...' - 查看 SQL 文件头部发现 SSH 的 PQC 警告信息混入了标准输出
核心问题
- SSH 客户端连接时输出的警告信息(post-quantum key exchange warning)默认写入 stdout
ssh <host> "command"的 stdout 同时包含 SSH 警告和命令输出- 当管道重定向到文件时,警告文本污染了 SQL 语句
关键线索:
- 警告内容开头:** WARNING: connection is not using a post-quantum key exchange algorithm.
- 警告来源:OpenSSH 9.x 对不支持 PQC 的服务器发出的安全提示
解决方法
方案:重定向 SSH stderr
将 SSH 的 stderr 重定向到 /dev/null,只保留命令的实际输出:
# 错误写法(SSH 警告混入 stdout)
ssh news "mysqldump -u root -p'xxx' news recommendation_scores" > dump.sql
# 正确写法(stderr 重定向,干净输出)
ssh news "mysqldump -u root -p'xxx' news recommendation_scores" 2>/dev/null > dump.sql
替代方案:抑制 SSH 警告
在 ~/.ssh/config 中为特定主机添加:
Host news
LogLevel ERROR
或在命令行指定:
ssh -o LogLevel=ERROR news "command"
下次防错措施
-
导出后快速验证:检查 SQL 文件开头是否为
-- MySQL dump而非其他文本head -1 dump.sql # 应输出 "-- MySQL dump..." 而不是 "** WARNING..." -
管道操作规范:SSH 命令用于数据导出时,始终加
2>/dev/null排除警告干扰 -
也可备选校验:用
file dump.sql检查文件是否为有效文本,或用grep 'WARNING' dump.sql检查污染