首页 > 解决方案 > SFTPOperator 无法通过需要密码和公钥身份验证的主机进行身份验证

问题描述

气流版本:2.0.0

当我使用 sftp 命令从任何气流工作人员手动连接到主机时,一切正常。这是我尝试使用在后台使用 paramiko 库传输文件的运算符时的错误日志:

{ssh.py:202} WARNING - No Host Key Verification. This wont protect against Man-In-The-Middle attacks
{transport.py:1819} INFO - Connected (version 2.0, client 1.91)
{transport.py:1819} INFO - Auth banner: b'MOMENTUM SYSTEMS - SSH Server\nAuthentication Methods Supported:\nPUBLICKEY, PASSWORD'
{transport.py:1819} INFO - Authentication continues...
{transport.py:1819} INFO - Disconnect (code 2): unexpected service request
{taskinstance.py:1396} ERROR - Authentication failed.
Traceback (most recent call last):
  File "/home/centos/.local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 1086, in _run_raw_task
    self._prepare_and_execute_task_with_callbacks(context, task)
  File "/home/centos/.local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 1260, in _prepare_and_execute_task_with_callbacks
    result = self._execute_task(context, task_copy)
  File "/home/centos/.local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 1300, in _execute_task
    result = task_copy.execute(context=context)
  File "/home/centos/airflow-dags/utils/operators/s3_to_sftp.py", line 76, in execute
    sftp_client = ssh_hook.get_conn().open_sftp()
  File "/home/centos/.local/lib/python3.7/site-packages/airflow/providers/ssh/hooks/ssh.py", line 225, in get_conn
    client.connect(**connect_kwargs)
  File "/home/centos/.local/lib/python3.7/site-packages/paramiko/client.py", line 446, in connect
    passphrase,
  File "/home/centos/.local/lib/python3.7/site-packages/paramiko/client.py", line 764, in _auth
    raise saved_exception
  File "/home/centos/.local/lib/python3.7/site-packages/paramiko/client.py", line 751, in _auth
    self._transport.auth_password(username, password)
  File "/home/centos/.local/lib/python3.7/site-packages/paramiko/transport.py", line 1509, in auth_password
    return self.auth_handler.wait_for_response(my_event)
  File "/home/centos/.local/lib/python3.7/site-packages/paramiko/auth_handler.py", line 236, in wait_for_response
    raise e
paramiko.ssh_exception.AuthenticationException: Authentication failed.

我使用的 Airflow 连接有密码,没有额外的选项。

标签: sshairflowparamiko

解决方案


为链接问题提供的答案适用于我的用例:

使用 Paramiko 进行多因素身份验证(密码和密钥)


推荐阅读