Ошибка оператора SSH воздушного потока: обнаружен ключ RSA, ожидаемый ключ OPENSSH

#airflow

#воздушный поток

Вопрос:

Группа баз данных airflow, которая работает на Airflow: 1.10.10, случайным образом завершается сбоем со следующей трассировкой: Airflow работает на docker swarm, и тот же ключ ssh RSA используется для большинства подключений, используемых в группе баз данных Airflow. Несколько баз данных случайно завершаются ошибкой с указанным ниже обратным отслеживанием:

Закрытый ключ SSH — это ключ RSA, сгенерированный с помощью ssh-keygen с настройками по умолчанию.

Трассировка:

 [2020-11-21 18:30:38,821] {taskinstance.py:1145} ERROR - SSH operator error: encountered RSA key, expected OPENSSH key
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python2.7/site-packages/airflow/models/taskinstance.py", line 983, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/home/airflow/.local/lib/python2.7/site-packages/airflow/contrib/operators/ssh_operator.py", line 177, in execute
    raise AirflowException("SSH operator error: {0}".format(str(e)))
AirflowException: SSH operator error: encountered RSA key, expected OPENSSH key
[2020-11-21 18:30:38,822] {taskinstance.py:1168} INFO - Marking task as UP_FOR_RETRY
[2020-11-21 18:30:43,763] {logging_mixin.py:112} INFO - [2020-11-21 18:30:43,763] {local_task_job.py:103} INFO - Task exited with return code 1
 

Код DAG:

 #!/usr/bin/env python2.7
from datetime import timedelta, datetime
import airflow
from airflow import DAG
from airflow.contrib.operators.ssh_operator import SSHOperator
import pendulum
local_timezone = pendulum.timezone("Asia/Calcutta")
default_args = dict(
    depends_on_past=False,
    start_date=datetime(2020,10,20,tzinfo=local_timezone),
    retries=1,
    retry_delay=timedelta(minutes=5),
)

dag = DAG(dag_id='queue_cleanup',
          default_args=default_args,
          schedule_interval='@daily',
          dagrun_timeout=timedelta(seconds=120),
          catchup=False,
          tags=['maintenance'])
print(dag.timezone)

t1_bash = """
sh /home/user/default_jobs/chk_status.sh
"""
t1 = SSHOperator(
    ssh_conn_id='conn_id',
    task_id='ssh_default_queue_cleanup',
    command=t1_bash,
    dag=dag)
 

Идентификатор подключения дополнительный Json:

 {
   "key_file": "/etc/id_rsa",
   "timeout": "10",
   "compress": "false",
   "no_host_key_check": "true",
   "allow_host_key_change": "false"
}
 

Ответ №1:

Проблема решена. Проблема была с узлом назначения, к которому мы пытались подключиться, используя идентификатор подключения ssh. Срок действия учетной записи пользователя истек

пользователь chage -l —> показал, что срок действия учетной записи пользователя истек.

После активации учетной записи пользователя все работает нормально.