Airflow:SSHHook:ERROR-不是有效的RSA私钥文件

问题描述

尝试使用Airflow中的私钥连接到SFTP服务器

我在其他选项中使用了private_key选项

提供如下连接详细信息

    "sftp_conn_id": {
        "host": "sftp.xxxx.com","login": "sftp.age","password": "XXXXX","port": 22,"conn_extra": {
          "private_key":"-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,B8D80099CE363B08
nkmagDeESjucz2UKbiIVNBxerx7hoPuvhDz8BeCrwf0o55ILUQaa1tKz+B5dvA5N
w9Wai9bx1xUfo+e9u2Nu67ytDiUUxlGWZNTxaM+Un2mdq5TwIayOsoVAmqcsHoY8
LdTJaxpF8DmjHKwAARccl02L8byulin8BShGGKj4wKKUc+ZucLYKIPTQXqYTLPcZ
qfjsJvzee2/V4R7PwkHBRJaZRv2WvmF/GGHp1nrMBx1QyJBCOdr9Fc7R0aqOzREV
3YMGPVKaYQp+DrjSTtrQPE5mjxWNKU7uPbAlEaDI/ttzH3ObosK9O8381tvYHkGk
Wdi1o3PudQ8ewR0GtL6TMjBjcqHJjqGMxd1hRv/4vIRVJUMIz3w+TYftMNGobSKc
38pMg4P9ZS7nqwU0vmBIhcc/8vkafU/BFYx8xWpdfgrN+ilcRp2Ki5QhwUHZFymZ
E7yCYZJZsHbBZmGW3J69jY0OCHbR9LkUKqHZpBakQDijyUvUHqbhuvORwJEvTxvj
uG7OemCrZu/tjNnKeu+ES3nC6p678OIm3P7g4v32+ot/ymiz0EnC+vE1vHS+/8qt
4pZgmzQlZbdswT1krxCIpSiVipq4JsnvOjcl/xO1L85wN0lVqPZowA==
-----END RSA PRIVATE KEY-----"
        }
      }

错误

[2020-09-30 23:03:15,088] {taskinstance.py:1145} ERROR - not a valid RSA private key file
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/airflow/models/taskinstance.py",line 978,in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/airflow/dags/plugins/bi_plugin.py",line 4418,in execute
    ssh_hook = SSHHook(ssh_conn_id=self.sftp_conn_id)
  File "/usr/local/lib/python3.6/site-packages/airflow/contrib/hooks/ssh_hook.py",line 108,in __init__
    self.pkey = paramiko.RSAKey.from_private_key(StringIO(private_key))
  File "/usr/local/lib/python3.6/site-packages/paramiko/pkey.py",line 256,in from_private_key
    key = cls(file_obj=file_obj,password=password)
  File "/usr/local/lib/python3.6/site-packages/paramiko/rsakey.py",line 52,in __init__
    self._from_private_key(file_obj,password)
  File "/usr/local/lib/python3.6/site-packages/paramiko/rsakey.py",line 179,in _from_private_key
    data = self._read_private_key("RSA",file_obj,password)
  File "/usr/local/lib/python3.6/site-packages/paramiko/pkey.py",line 324,in _read_private_key
    raise SSHException("not a valid {} private key file".format(tag))

在Talend中,它可以像bash一样正常工作,如下所示:

spawn sftp -oIdentityFile=/home/talenduser/.ssh/hq sftp.age@sftp.XXXX.com
expect "sftp.age@sftp.XXXX.com's password:"
send "BuGuhbu7"
expect "sftp>"
send "cd data/\n"
expect "sftp>"

解决方法

您应该传递conn值,例如:

{"key_file":"path/to/your/keyfile","no_host_key_check":true}