본문 바로가기
카테고리 없음

[Airflow] SFTP 접속 설정 (SSH Key 인증)

by 쿡노트 2024. 3. 22.
반응형

Airflow에서 SFTP 접속 설정 하는 방법은 두 가지가 있습니다. (둘 중에 하나만 사용)

1. ID, Password 인증
2. SSH Key 인증 방식 ("key_file" : "path/to/private_key" 또는 host_key : "public key" 사용)

 

참조 URL :

https://airflow.apache.org/docs/apache-airflow-providers-sftp/4.6.1/connections/sftp.html

환경

  • Airflow 2.4.2
  • apache-airflow-providers-sftp 4.6.1
  • CentOS 7.9

Airflow Web sever connection 에서 SSH key 인증으로 접속 설정 하는 방법을 기재하겠습니다.
A서버에(Host) airflow가 설치 되어 있고, B서버로(remote_host) SFTP 접속을 할 때 SSH Key 인증 방식 사용 설정은,

  • Connection Type - SFTP
  • Host - 192.168.xx.xxx
  • Username - 원격 서버 ID 
  • Passsword - 공란
  • Port - 22

Extra 란에는 아래 두가지 중 한 가지로 작성하면 됩니다.

1. private key 적용 방식

"key_file" : airlfow를 설치한 A 서버 사용자의 private key 경로와 private key 파일명을 기재

{"key_file" : /home/user명/.ssh/id_rsa, "no_host_key_check": "false"}

2. public key 값 적용 방식

"host_key" : airlfow를 설치한 A서버 사용자의 public key 값을 기재
**A서버 id_rsa.pub 파일의 AAA 값 부터, user@host명의 값 전까지 기재 (id_rsa.pub 값에 따라서 마지막에 "==" 값이 없을 수도 있다.)

{"host_key": "AAAHD...YDWwq==", "no_host_key_check": "false"}

 

Extra 옵션 설명 :
no_host_key_check : default 'true' 

- true 일 경우 (airflow 설치한 서버) 로컬 서버의 'known_hosts' 파일에 원격 서버의 정보가 없을 경우 SFTP 접속 시 자동으로 known_hosts에 원격서버의 정보가 작성된다. 
- false 일 경우 로컬 서버의 'known_hosts' 적혀 있지 않은 원격서버의 키 인증 접속은 실패한다. known_hosts 파일의 관리가 필요하다.

 

단, "no_host_key_check": "true" 일경우 airflow log에 아래 경고 문구가 출력됨으로 업무에 적용 시 참고하길 바란다.
(WARNING - No Host Key Verification. This won't protect against Man-In-The-Middle attacks)

 

allow_host_key_change : default 'false' 원격서버(호스트)의 키가 변경 된 원격서버의 대해서 연결을 허용하고  'REMOTE HOST IDENTIFICATION HAS CHANGED' 오류가 발생할 경우 'true'로 설정하라고 한다. (별도로 설정을 하지 않았다.)

 

Connection Test

Key 생성

private key, public key가 없다면 key를 생성 해준다.

--A서버(airflow를 설치한 사용자 계정에서 수행)
$ ssh-keygen -t rsa
$ ll ~/.ssh/

id_rsa #private key
id_rsa.pub #public key

B서버 (remote_host/원격 서버) 적용

모든 동작은 Airflow 가 설치된 A서버의 사용자 계정에서 수행한다.

--A서버의 public key B서버로 전송
$ ssh-copy-id B서버 계정@B서버 IP

ex) $ ssh-copy-id root@192.168.xx.xxx


마지막으로 Airflow connection 테스트 전, A서버(airflow 설치 서버)에서 B서버(원격 서버로) ssh 접속을 1회 수행한다. (A서버 known_hosts 파일에 B서버의 정보를 기록)

$ ssh root@192.168.xx.xxx

 

참조 1)  airflow SFTP 모듈 설치

--2.4.2는 현재 airflow 의 버전
$ pip3 install apache-airflow[sftp]==2.4.2

참조 2) private key 경로가 다르거나, private key 파일이 없을 경우 connection test 상단에 표시 문구

[Errno 2] No such file or directory: '/home/user명/.ssh/id_rsa'

참조 3) SFTP 접속 DAG 수행 시  SSH key 인증 airflow log

--SSH Key 인증 실패
[2024-03-14, 10:16:19 UTC] {transport.py:1871} INFO - Authentication (publickey) failed.
--SSH Key 인증 성공
[2024-03-15, 05:53:19 UTC] {transport.py:1871} INFO - Authentication (publickey) successful!
반응형