airflow.providers.ssh.hooks.ssh

SSH 连接的 Hook。

属性

CMD_TIMEOUT

SSHHook

使用 Paramiko 执行远程命令。

SSHHookAsync

使用 asyncssh 的异步 SSH Hook,用于触发器。

函数

is_arg_set(value)

模块内容

airflow.providers.ssh.hooks.ssh.is_arg_set(value)[source]
airflow.providers.ssh.hooks.ssh.CMD_TIMEOUT = 10[source]
class airflow.providers.ssh.hooks.ssh.SSHHook(ssh_conn_id=None, remote_host='', username=None, password=None, key_file=None, port=None, conn_timeout=None, cmd_timeout=NOTSET, keepalive_interval=30, banner_timeout=30.0, disabled_algorithms=None, ciphers=None, auth_timeout=None, host_proxy_cmd=None)[source]

基类: airflow.providers.common.compat.sdk.BaseHook

使用 Paramiko 执行远程命令。

此 Hook 还可以创建 SSH 隧道,并作为 SFTP 文件传输的基础。

参数:
  • ssh_conn_id (str | None) – ssh connection id 来自 Airflow Connections,可获取所需的参数,如用户名、密码或 key_file,但在初始化期间传入的参数具有更高优先级。

  • remote_host (str) – 要连接的远程主机

  • username (str | None) – 用于登录 remote_host 的用户名

  • password (str | None) – 登录 remote_host 的用户名对应的密码

  • key_file (str | None) – 用于连接 remote_host 的密钥文件路径

  • port (int | None) – 连接的远程主机端口(默认使用 paramiko 的 SSH_PORT)

  • conn_timeout (int | None) – 连接 remote_host 时的超时时间(秒)。默认 10 秒。如果提供,则会覆盖在 ssh_conn_id 连接中预定义的 conn_timeout

  • cmd_timeout (float | airflow.sdk.definitions._internal.types.ArgNotSet | None) – 执行命令的超时时间(秒)。默认 10 秒。为 None 表示不限制超时。若提供,则会覆盖在 ssh_conn_id 连接中预定义的 cmd_timeout

  • keepalive_interval (int) – 每隔 keepalive_interval 秒向远程主机发送一次保活包

  • banner_timeout (float) – 等待服务器横幅的超时时间(秒)

  • disabled_algorithms (dict | None) – 将在传输期间被禁用的算法类型到算法标识符可迭代对象的映射字典

  • ciphers (list[str] | None) – 按偏好顺序使用的密码套件列表

  • auth_timeout (int | None) – 进行远程主机认证尝试的超时时间(秒)

conn_name_attr = 'ssh_conn_id'[source]
default_conn_name = 'ssh_default'[source]
conn_type = 'ssh'[source]
hook_name = 'SSH'[source]
classmethod get_ui_field_behaviour()[source]

返回 SSH 连接的自定义 UI 字段行为。

ssh_conn_id = None[source]
remote_host = ''[source]
username = None[source]
password = None[source]
key_file = None[source]
pkey = None[source]
port = None[source]
conn_timeout = None[source]
cmd_timeout[source]
keepalive_interval = 30[source]
banner_timeout = 30.0[source]
disabled_algorithms = None[source]
ciphers = None[source]
host_proxy_cmd = None[source]
auth_timeout = None[source]
compress = True[source]
no_host_key_check = True[source]
allow_host_key_change = False[source]
host_key = None[source]
look_for_keys = True[source]
client: paramiko.SSHClient | None = None[source]
property host_proxy: paramiko.ProxyCommand | None[source]
get_conn()[source]

建立到远程主机的 SSH 连接。

get_tunnel(remote_port, remote_host='localhost', local_port=None)[source]

通过 SSH 连接创建本地端口转发隧道。

在概念上相当于 ssh -L <LOCAL_PORT>:<remote_host>:<REMOTE_PORT>

返回的 SSHTunnel 应作为上下文管理器使用。

with hook.get_tunnel(remote_port=5432) as tunnel:
    connect_to("localhost", tunnel.local_bind_port)

.start() / .stop() 方法仍可使用,但已弃用。

Changed in version 4.4.0: 返回 SSHTunnel 而不是 sshtunnel.SSHTunnelForwarder。隧道现在复用 Hook 的 SSH 连接(get_conn()),而不是重新建立单独的连接。

参数:
  • remote_port (int) – 要创建隧道的远程端口

  • remote_host (str) – 要创建隧道的远程主机(默认 localhost)

  • local_port (int | None) – 本地端口(为 None 时使用临时端口)

返回:

SSHTunnel 实例

返回类型:

airflow.providers.ssh.tunnel.SSHTunnel

exec_ssh_client_command(ssh_client, command, get_pty, environment, timeout=NOTSET)[source]
test_connection()[source]

通过执行远程 bash 命令来测试 SSH 连接。

class airflow.providers.ssh.hooks.ssh.SSHHookAsync(ssh_conn_id=default_conn_name, host=None, port=None, username=None, password=None, known_hosts=default_known_hosts, key_file='', passphrase='', private_key='')[source]

基类: airflow.providers.common.compat.sdk.BaseHook

使用 asyncssh 的异步 SSH Hook,用于触发器。

此 Hook 为可延迟(deferrable)运算符及其触发器提供异步 SSH 连接功能。

参数:
  • ssh_conn_id (str) – Airflow 连接中的 SSH 连接 ID

  • host (str | None) – SSH 服务器的主机名(会覆盖连接中的设置)

  • port (int | None) – SSH 服务器的端口(会覆盖连接中的设置)

  • username (str | None) – 用于认证的用户名(会覆盖连接中的设置)

  • password (str | None) – 用于认证的密码(会覆盖连接中的设置)

  • known_hosts (str) – known_hosts 文件的路径。默认值为 ~/.ssh/known_hosts

  • key_file (str) – 用于认证的私钥文件路径

  • passphrase (str) – 私钥的密码短语

  • private_key (str) – 以字符串形式提供的私钥内容

conn_name_attr = 'ssh_conn_id'[source]
default_conn_name = 'ssh_default'[source]
conn_type = 'ssh'[source]
hook_name = 'SSH'[source]
default_known_hosts = '~/.ssh/known_hosts'[source]
ssh_conn_id = 'ssh_default'[source]
host = None[source]
port = None[source]
username = None[source]
password = None[source]
known_hosts: bytes | str[source]
key_file = ''[source]
passphrase = ''[source]
private_key = ''[source]
async run_command(command, timeout=None)[source]

在远程主机上异步执行命令。

参数:
  • command (str) – 要执行的命令

  • timeout (float | None) – 可选的超时时间(秒)

返回:

包含 (exit_code, stdout, stderr) 的元组

返回类型:

tuple[int, str, str]

async get_tunnel(remote_port, remote_host='localhost', local_port=None)[source]

通过 SSH 连接创建一个异步的本地端口转发隧道。

使用方法

async with await hook.get_tunnel(remote_port=5432) as tunnel:
    connect_to("localhost", tunnel.local_bind_port)
参数:
  • remote_port (int) – 要创建隧道的远程端口

  • remote_host (str) – 要创建隧道的远程主机(默认 localhost)

  • local_port (int | None) – 本地端口(为 None 时使用临时端口)

返回:

AsyncSSHTunnel 实例

返回类型:

airflow.providers.ssh.tunnel.AsyncSSHTunnel

async run_command_output(command, timeout=None)[source]

执行命令并返回标准输出。

参数:
  • command (str) – 要执行的命令

  • timeout (float | None) – 可选的超时时间(秒)

返回:

标准输出(字符串)

返回类型:

str

此条目是否有帮助?