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 中的 extras 中配置私钥,可以将换行符替换为字面量
\n
python -c 'import re, sys; print(re.sub("\r\n", "\\\\n", sys.stdin.read()))' < /path/to/your/key
然后,您可以在 extras JSON 中提供结果,如下所示
{"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMII.....jBV50\n-----END RSA PRIVATE KEY-----"}