SSH 連線¶
SSH 連線類型提供連線以使用 SSHHook
,以便使用 SSHOperator
在遠端伺服器上執行命令,或使用 SFTPOperator
從遠端伺服器傳輸檔案。
設定連線¶
- 主機 (必填)
要連線的遠端主機。
- 使用者名稱 (選填)
連線到
remote_host
的使用者名稱。- 密碼 (選填)
指定使用者名稱的密碼,以連線到
remote_host
。- 埠 (選填)
要連線的遠端主機埠。預設值為
22
。- 額外 (選填)
指定可用於 ssh 連線的額外參數(以 json 字典形式)。支援以下標準 python 參數之外的參數
key_file
- 將用於連線到 remote_host 的私密 SSH 金鑰檔案的完整路徑。private_key
- 用於連線到 remote_host 的私密金鑰內容。private_key_passphrase
- 用於解密私密金鑰的私密金鑰密碼。conn_timeout
- TCP 連線的可選逾時時間(秒)。預設值為10
。timeout
- 已棄用 - 請改用 conn_timeout。cmd_timeout
- 執行命令的逾時時間(秒)。預設值為 10 秒。null 值表示沒有逾時。compress
-true
要求遠端用戶端/伺服器壓縮流量;false
拒絕壓縮。預設值為true
。no_host_key_check
- 設定為false
以限制連線到~/.ssh/known_hosts
(主機檔案)中沒有條目的主機。這提供了針對木馬程式攻擊的最大保護,但是當/etc/ssh/ssh_known_hosts
檔案維護不善或頻繁連線到新主機時,可能會很麻煩。此選項強制使用者手動新增所有新主機。預設值為true
,ssh 將自動將新主機金鑰新增至使用者已知的主機檔案。allow_host_key_change
- 如果您想要允許連線到主機金鑰已變更的主機,或當您收到「REMOTE HOST IDENTIFICATION HAS CHANGED」錯誤時,請設定為true
。這不會防止中間人攻擊。其他可能的解決方案是從~/.ssh/known_hosts
檔案中移除主機條目。預設值為false
。look_for_keys
- 如果您想要停用在~/.ssh/
中搜尋可探索的私密金鑰檔案,請設定為false
host_key
- 主機的 base64 編碼 ssh-rsa 公開金鑰,或 “ssh-<key type> <key data>”(如同您在known_hosts
檔案中找到的一樣)。指定此項允許僅在端點的公開金鑰與此值相符時才建立連線。disabled_algorithms
- 將演算法類型對應到可迭代演算法識別碼的字典,這些識別碼將在傳輸的生命週期內停用。ciphers
- 要依偏好順序使用的密碼清單。
「額外」欄位範例
{ "key_file": "/home/airflow/.ssh/id_rsa", "conn_timeout": "10", "compress": "false", "look_for_keys": "false", "allow_host_key_change": "false", "host_key": "AAAHD...YDWwq==", "disabled_algorithms": {"pubkeys": ["rsa-sha2-256", "rsa-sha2-512"]}, "ciphers": ["aes128-ctr", "aes192-ctr", "aes256-ctr"] }
當將連線指定為 URI 時(在
AIRFLOW_CONN_{CONN_ID}
變數中),您應該依照連線的標準語法指定它,其中額外參數作為 URI 的參數傳遞(請注意,URI 的所有元件都應進行 URL 編碼)。例如,要提供具有
key_file
(其中包含金鑰檔案的路徑)的連線字串export AIRFLOW_CONN_MAIN_SERVER='ssh://user:pass@localhost:22?conn_timeout=10&compress=false&no_host_key_check=false&allow_host_key_change=true&key_file=%2Fhome%2Fairflow%2F.ssh%2Fid_rsa'
私密金鑰可以編碼成單行程式碼,以便在環境變數中使用,如下所示
python -c 'from urllib.parse import quote_plus, sys; print(quote_plus(sys.stdin.read()))' < /path/to/your/key
然後,您可以將其匯出為環境變數
export AIRFLOW_CONN_SSH_SERVER='ssh://127.0.0.1?private_key=-----BEGIN+RSA+PRIVATE+KEY-----%0D%0AMII.....jBV50%0D%0A-----END+RSA+PRIVATE+KEY-----'
若要在 Airflow UI 的額外欄位中設定私密金鑰,您可以將換行符號替換為文字
\n
python -c 'import re, sys; print(re.sub("\r\n", "\\\\n", sys.stdin.read()))' < /path/to/your/key
然後,您可以將結果以 JSON 格式提供在額外欄位中,如下所示
{"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMII.....jBV50\n-----END RSA PRIVATE KEY-----"}