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-----"}

此條目是否有幫助?