Airflow 1.10中SSHOperator报错无可用身份验证方法如何排查
Airflow SSH Operator 认证报错排查方案
1. 连接配置校验
- 先确认Airflow SSH连接的基础字段填写正确:Host为远程机器内网IP/域名、Username为远程服务器登录用户名、Port默认22如果有修改要对应匹配,三个基础字段不可遗漏,SSHHook不会从Extra字段读取以上参数。
- 检查Extra字段里的私钥格式:Airflow 1.10版本的SSHHook解析私钥时要求换行符必须转义为
\n,直接粘贴带原生换行的私钥会被识别为无效格式。正确格式示例如下:
{"private_key": "-----BEGIN RSA PRIVATE KEY-----\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-----END RSA PRIVATE KEY-----"}
- 若你使用的私钥设置了密码,需要在Extra中额外新增
"private_key_passphrase": "你的私钥密码"字段,否则也会触发认证失败。
2. 远程服务器SSH配置校验
- 首先登录Airflow服务所在的AWS EC2机器,手动使用你配置的用户名+私钥尝试登录远程机器验证可用性:将私钥存为临时文件
test_id_rsa,权限设置为600,执行ssh -i test_id_rsa 用户名@远程机器IP ls,如果该步骤执行失败,说明是私钥本身或远程SSH服务配置问题,与Airflow无关。 - 检查远程服务器
/etc/ssh/sshd_config配置,确认PubkeyAuthentication yes处于开启状态;同时确认对应用户家目录下~/.ssh/authorized_keys文件中已添加私钥对应的公钥,文件权限为600、.ssh目录权限为700。 - 确认远程服务器的AWS安全组规则,已放通Airflow服务所在EC2的内网IP的22端口入方向访问权限。
3. Airflow版本适配校验
Airflow 1.10的contrib组件包中部分版本的SSHHook存在无法直接从Extra字段读取private_key的bug,若上述配置都确认无误,可以在DAG中手动加载私钥测试,规避连接配置读取的问题:
import io import paramiko from airflow.contrib.hooks.ssh_hook import SSHHook from airflow.contrib.operators.ssh_operator import SSHOperator # 手动加载私钥测试 private_key = "-----BEGIN RSA PRIVATE KEY-----\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-----END RSA PRIVATE KEY-----" pkey = paramiko.RSAKey.from_private_key(io.StringIO(private_key)) sshHook = SSHHook(ssh_conn_id="ssh_conn", pkey=pkey) ls = SSHOperator( task_id="ls", command= "ls -l", ssh_hook = sshHook, dag = dag)
如果该代码可以正常运行,说明是你当前Airflow版本的SSHHook解析Extra字段存在bug,可选择升级contrib组件包,或直接使用代码手动加载私钥的方式解决问题。
内容的提问来源于stack exchange,提问作者Justin C
相关产品推荐
相关产品推荐

