You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow 2.7.1中SSHOperator报FileNotFoundError问题求助

问题分析与解决方案

核心原因:Airflow运行在Docker容器内部,容器拥有独立的文件系统,你宿主机(Airflow虚拟机)上的/home/ubuntu/.ssh/id_rsa并未同步到容器内部,导致容器找不到该私钥文件。而你直接在虚拟机上SSH能成功,是因为虚拟机本地存在这个文件,和容器环境完全隔离。

以下是具体解决步骤:

1. 检查Airflow SSH连接配置

登录Airflow UI,进入Admin -> Connections找到ssh_test连接:

  • 如果配置的是私钥路径:确保路径是容器内部存在的路径(而非宿主机路径),默认容器内运行用户是airflow,所以路径应该是/home/airflow/.ssh/id_rsa而非/home/ubuntu/.ssh/id_rsa。
  • 更稳妥的方式:直接在Private Key字段粘贴私钥的文本内容(清空文件路径配置),这样无需依赖容器内的文件,直接使用连接中存储的私钥。

2. 映射宿主机私钥到Docker容器

如果坚持使用文件路径方式,需要修改Airflow的docker-compose.yml,将宿主机的私钥和known_hosts文件映射到容器内:
在airflow-worker和airflow-webserver的volumes节点下添加:

volumes:
  # 保留原有volume配置
  - /home/ubuntu/.ssh/id_rsa:/home/airflow/.ssh/id_rsa:ro
  - /home/ubuntu/.ssh/known_hosts:/home/airflow/.ssh/known_hosts:ro
  • :ro表示只读,避免容器修改宿主机文件。
  • 映射后重启容器:docker-compose down && docker-compose up -d

3. 修正容器内私钥权限

SSH要求私钥权限必须为600(仅所有者可读可写),否则会拒绝使用。映射后进入容器设置权限:

# 给worker容器设置权限
docker exec -it airflow-worker chmod 600 /home/airflow/.ssh/id_rsa
# 给webserver容器设置权限(如需在webserver测试)
docker exec -it airflow-webserver chmod 600 /home/airflow/.ssh/id_rsa

4. 验证容器内私钥是否存在

进入容器检查文件是否存在且权限正确:

docker exec -it airflow-worker ls -l /home/airflow/.ssh/

输出应显示id_rsa文件,权限为-rw-------。

完成以上步骤后,重新运行你的DAG即可正常建立SSH连接。

内容的提问来源于stack exchange,提问作者Joe Yong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:32:34