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

使用Airflow SFTPToGCSOperator时遇host_proxy_cmd参数TypeError错误求助

解决Airflow SFTPToGCSOperator报错:TypeError: SSHHook.init() got an unexpected keyword argument 'host_proxy_cmd'

问题原因

这个报错源于你使用的Airflow版本中,SSHHook不支持host_proxy_cmd参数。host_proxy_cmd是Airflow 2.4.0版本才新增的参数,若当前使用的是2.3.x及更早版本,即便你在Airflow UI的SFTP连接里配置了该字段,Operator初始化时会把所有连接参数传递给SSHHook,旧版本无法识别这个参数就会触发报错。

解决方案

方案1:升级Airflow到2.4.0及以上版本

如果环境允许升级,直接将Airflow版本更新到2.4.0或更高版本,就能原生支持host_proxy_cmd参数。对于Docker环境,修改docker-compose.yaml中的Airflow镜像标签(比如apache/airflow:2.6.3),重新部署容器即可。

方案2:修改SFTP连接配置(不升级版本)

若无法升级Airflow,打开Airflow UI的SFTP连接配置页面,删除host_proxy_cmd相关配置项。如果需要通过代理连接SFTP,可改用以下方式:

  • 在Docker容器中配置系统级代理,设置HTTP_PROXY、HTTPS_PROXY环境变量,让SFTP客户端自动使用代理。
  • 使用proxy_jump参数(Airflow 2.2+支持),在连接配置中填写proxy_jump字段,格式为user@proxy_host:port,通过跳板机连接SFTP服务器。

方案3:自定义处理连接参数(进阶)

如果必须保留host_proxy_cmd配置且不能升级,可以自定义Operator或修改SSHHook的初始化逻辑,过滤掉不支持的参数。示例代码如下:

from airflow.providers.google.cloud.transfers.sftp_to_gcs import SFTPToGCSOperator
from airflow.providers.ssh.hooks.ssh import SSHHook

class CustomSFTPToGCSOperator(SFTPToGCSOperator):
    def _get_ssh_hook(self) -> SSHHook:
        hook = SSHHook(ssh_conn_id=self.sftp_conn_id)
        # 手动处理连接参数,过滤掉host_proxy_cmd
        conn = hook.get_connection(self.sftp_conn_id)
        extra = conn.extra_dejson
        if 'host_proxy_cmd' in extra:
            # 若需使用代理命令,可在此手动设置到hook的ssh_client
            # 示例:hook.ssh_client.set_proxy_command(extra['host_proxy_cmd'])
            pass
        return hook

# 使用自定义Operator替代原Operator
transfer_to_gcs = CustomSFTPToGCSOperator(
    task_id=f'transfer_{table}',
    sftp_conn_id="sftp_connection",
    source_path=sftp_path,
    destination_bucket=gcs_bucket,
    destination_path=file_name,
    dag=dag
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:34:54