创建Airflow SSH连接报错:无法创建Fernet对象,报Incorrect padding
报错核心成因
Failed to update record. Could not create Fernet object: Incorrect padding 本质是Airflow的内置Fernet加密模块初始化失败,和SSH连接的参数填写逻辑无关——该模块负责加密存储连接配置里的密码类敏感字段,只要初始化环节出错,所有带密码字段的连接创建、更新操作都会直接失败。
常见的触发原因包括:
- 手动抄录密钥时存在字符遗漏、末尾Base64填充位缺失
- 配置文件中密钥前后带多余空格、换行,或者被额外的引号、注释内容污染
- Webserver、Scheduler、Worker等不同组件加载的密钥字符串不一致
- 配置文件中
fernet_key字段留空,导致Airflow每次启动随机生成临时密钥,在多组件部署场景下极易出现密钥不一致、格式校验不通过的问题
分步骤排查解决
- 校验全环境的Fernet密钥配置
先定位Airflow实际加载密钥的来源,常见的两个读取优先级路径为:环境变量AIRFLOW__CORE__FERNET_KEY、airflow.cfg配置文件中[core]段下的fernet_key字段。
合法的Fernet密钥为32字节随机数经URL安全Base64编码后的固定长度字符串,只要密钥内容不符合上述标准,就会触发padding校验报错。 - 生成合规的标准密钥
不要手动生成/编写Fernet密钥,直接在Airflow的运行环境中执行自带工具生成:python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
完整复制输出的整行字符串,不要截断、不要额外添加字符。 - 统一全组件的密钥配置
- 停止所有正在运行的Airflow组件(Webserver、Scheduler、Worker、Triggerer)
- 将生成的标准密钥配置为全组件统一读取的固定值:配置时不要给密钥额外包裹单/双引号,不要在密钥行尾追加注释,避免配置解析错误
- 重新启动所有Airflow组件
- 验证修复效果
重启完成后,先在Web端创建任意带密码字段的测试连接,确认可以正常保存无报错后,再重新填写SSH连接的主机、端口、用户名、密码等参数完成创建即可。
注意:替换密钥后,旧密钥加密存储的历史连接数据将无法被解密,需要重新配置这些历史连接的敏感字段。
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

