跳转至

基础设施-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"

下次防错措施

  1. 导出后快速验证:检查 SQL 文件开头是否为 -- MySQL dump 而非其他文本

    head -1 dump.sql  # 应输出 "-- MySQL dump..." 而不是 "** WARNING..."
    

  2. 管道操作规范:SSH 命令用于数据导出时,始终加 2>/dev/null 排除警告干扰

  3. 也可备选校验:用 file dump.sql 检查文件是否为有效文本,或用 grep 'WARNING' dump.sql 检查污染