connection

class fabric.connection.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)

到ssh守护进程的连接,具有用于命令和文件传输的方法。

基础

此类继承自调用的 Context ,因为它是命令、任务等可以在其中操作的上下文。它还封装了一个Paramiko SSHClient 实例,使用它执行有用的高级操作 SSHClientChannel 从中生成的实例。

生命周期

Connection 有一个基本的“createdo workdisconnect/close 生命周期:

  • Instantiation 用连接参数压印对象(但是 not 实际启动网络连接)。

    • 存在用户的备用构造函数 upgrading piecemeal from Fabric 1from_v1
  • 方法如 runget ETC自动触发调用 open 如果连接未处于活动状态,用户当然可以调用 open 如果需要,手动操作。

  • 连接并不总是需要显式地关闭;很多时候,paramiko的垃圾收集挂钩或python自己的关闭序列会处理这些问题。 然而 ,如果遇到边缘情况(例如,退出时挂起的会话),在处理完连接后显式关闭连接会很有帮助。

    这可以通过手动调用 close 或将对象用作ContextManager::

    with Connection('host') as c:
        c.run('command')
        c.put('file')
    

注解

这个班重播 invoke.context.Context.runlocal 因此远程和本地命令执行都可以共存。

配置

大多数 Connection 参数荣誉 Invoke-style configuration 以及任何适用的 SSH config file directives . 例如,以连接到 admin@myhost 一个可以:

  • 使用任何内置配置机制,例如 /etc/fabric.yml~/.fabric.json ,集合驱动的配置,env vars等,声明 user: admin (或) {{"user": "admin"}} ,取决于配置格式。)然后 Connection('myhost') 会隐式地 user 属于 admin .
  • 使用包含 User admin 在任何适用范围内 Host 页眉 (Host myhostHost * 等) Connection('myhost') 将默认为 admin 用户。
  • 利用主机参数速记(如中所述 Config.__init__Connection('admin@myhost') .
  • 直接给出参数: Connection('myhost', user='admin') .

这同样适用于代理转发、网关等。

2.0 新版功能.

__eq__(other)

返回self==值。

__hash__()

返回哈希(self)。

__init__(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)

设置表示服务器连接的新对象。

参数:
  • host (str) -- 此连接的主机名(或IP地址)。可能包括 user and/or port parameters, of the form user@host, host:port, or user@host:port. .. note:: Due to ambiguity, IPv6 host addresses are incompatible with the host:port shorthand (though user@host will still work OK). In other words, the presence of >1 : character will prevent any attempt to derive a shorthand port number; use the explicit `` 端口``参数。…注:如果 host 匹配A Host 加载的ssh配置数据中的子句,以及 Host 子句包含 Hostname 指令,结果 Connection 对象将表现为 host 等于那个 Hostname 价值。在所有情况下, host 保存为 original_host 属性。因此,给定ssh config-like so::host myalias hostname realhostname调用like Connection(host='myalias') 将导致一个对象 host 属性是 realhostname 和谁的 original_host 属性是 myalias .
  • user (str) -- 远程连接的登录用户。默认为 config.user .
  • port (int) -- 远程端口。默认为 config.port .
  • config -- 对其执行方法时要使用的配置设置 Connection (例如,默认的ssh端口等)。应该是 Configinvoke.config.Config (将变成 Config )默认为匿名 Config 对象。
  • gateway -- 用作此连接的代理或网关的对象。此参数接受下列参数之一:-另一个 Connection (为了 ProxyJump 样式网关);—shell命令字符串(用于 ProxyCommand 样式样式网关)。违约: None ,表示不会发生网关(除非另有配置;如果要在运行时覆盖已配置的网关,请指定 gateway=False …)参阅: ssh连接网关
  • forward_agent (bool) -- 是否启用ssh代理转发。违约: config.forward_agent .
  • connect_timeout (int) -- 连接超时,以秒为单位。违约: config.timeouts.connect .
  • connect_kwargs (dict) -- 关键字参数逐字传递给 SSHClient.connect (什么时候 open 被称为。 Connection 尝试不增加其自身的附加设置/kwarg,除非它正在增加某种价值;因此, connect_kwargs 当前是提交参数的正确位置,例如 pkeykey_filename . 违约: config.connect_kwargs .
  • inline_ssh_env (bool) -- 是否将环境变量“inline”作为前缀发送到命令字符串前面 (export VARNAME=value && mycommand here ,而不是尝试通过ssh协议本身提交它们(这是默认行为)。如果远程服务器的 AcceptEnv 设置(这是常见的默认设置)。默认值是 inline_ssh_env configuration value (默认为 False )…警告::此功能可以 not 当前代表您执行任何shell转义!使用非平凡值时要小心,并注意,如果需要,您可以放入自己的引用、反斜杠等。如果在这里遇到太多问题,请考虑使用不同的方法(例如实际的远程shell脚本)。…注意::序列化为前缀时 FOO=bar 格式,我们应用内置 sorted 函数设置为env字典的键,以删除不明确/任意排序的内容。…注意:此设置与 地方的 shell命令;它只影响远程命令,因此 runsudo .
引发:

ValueError -- 如果用户或端口值通过 host 速记 and 他们自己的论点。(我们 refuse the temptation to guess

在 2.3 版更改: 增加了 inline_ssh_env 参数。

__lt__(other)

返回self<value。

__repr__()

返回repr(self)。

close()

如果打开,请终止到远程端的网络连接。

如果没有打开的连接,则此方法不起任何作用。

2.0 新版功能.

connect_kwargs = None

关键字参数给定给 paramiko.client.SSHClient.connect 什么时候? open 被称为。

connect_timeout = None

连接超时

forward_agent = None

是否启用代理转发。

forward_local(local_port, remote_port=None, remote_host='localhost', local_host='localhost')

打开连接隧道 local_port 到服务器的环境。

例如,假设您想连接到一个远程PostgreSQL数据库,该数据库被锁定,只能通过运行它的系统访问。您可以通过ssh访问此服务器,因此可以临时使本地系统上的端口5432与服务器上的端口5432类似:

import psycopg2
from fabric import Connection

with Connection('my-db-server').forward_local(5432):
    db = psycopg2.connect(
        host='localhost', port=5432, database='mydb'
    )
    # Do things with 'db' here

此方法类似于使用 -L openssh的选项 ssh 程序。

参数:
  • local_port (int) -- 要侦听的本地端口号。
  • remote_port (int) -- 远程端口号。默认值与 local_port .
  • local_host (str) -- 要侦听的本地主机名/接口。违约: localhost .
  • remote_host (str) -- 为转发的远程端口提供服务的远程主机名。违约: localhost (即,主持人 Connection 已连接到。)
返回:

没有;此方法仅用作影响本地操作系统状态的上下文管理器。

2.0 新版功能.

forward_remote(remote_port, local_port=None, remote_host='127.0.0.1', local_host='localhost')

打开连接隧道 remote_port 对当地环境。

例如,假设您在8080端口的工作站上以开发模式运行一个守护进程,并希望从生产环境或登台环境向其输送流量。

在大多数情况下,这是不可能的,因为您的办公室/家庭网络可能会阻止入站流量。但是您可以通过ssh访问此服务器,因此可以临时使该服务器上的端口8080与工作站上的端口8080类似:

from fabric import Connection

c = Connection('my-remote-server')
with c.forward_remote(8080):
    c.run("remote-data-writer --port 8080")
    # Assuming remote-data-writer runs until interrupted, this will
    # stay open until you Ctrl-C...

此方法类似于使用 -R openssh的选项 ssh 程序。

参数:
  • remote_port (int) -- 要侦听的远程端口号。
  • local_port (int) -- 本地端口号。默认值与 remote_port .
  • local_host (str) -- 转发连接所指向的本地主机名/接口。违约: localhost .
  • remote_host (str) -- 转发连接时要侦听的远程接口地址。违约: 127.0.0.1 (即只在远程本地主机上侦听)。
返回:

没有;此方法仅用作影响本地操作系统状态的上下文管理器。

2.0 新版功能.

classmethod from_v1(env, **kwargs)

使用结构1的备用构造函数 env 听写设置。

除此之外的所有关键字参数 env 是以不受干扰的方式传递给主构造函数的。

警告

因为您自己的配置覆盖将从 env ,确保只设置值 打算 改变你的v1环境!

详细说明 env var是导入的,它们在新的API中会变成什么,请参见 v1-env-var-imports .

参数:env -- 显式结构1 env 口述(技术上,任何 fabric.utils._AttributeDict 实例应该可以)从中提取配置。

2.4 新版功能.

gateway = None

网关 ConnectionProxyCommand 要使用的字符串(如果有)。

get(*args, **kwargs)

将远程文件获取到本地文件系统或类似文件的对象。

只是一个包装 Transfer.get . 有关详细信息,请参阅其文档。

2.0 新版功能.

host = None

目标服务器的主机名。

inline_ssh_env = None

是否使用前缀为inline的env vars构造远程命令行。

is_connected

此连接是否实际打开。

2.0 新版功能.

local(*args, **kwargs)

在本地系统上执行shell命令。

此方法实际上是 invoke.run ;有关详细信息和呼叫签名,请参阅其文档。

2.0 新版功能.

open()

启动与此对象绑定到的主机/端口的ssh连接。

这可能包括激活配置的网关连接(如果设置了网关连接)。

此外,还保存了一个到现在设置的传输对象的句柄,以便于访问。

各种连接时间设置(和/或其对应的 SSH config options )在呼叫中使用 SSHClient.connect . (有关详细信息,请参见 the configuration docs

2.0 新版功能.

open_gateway()

从获取类似套接字的对象 gateway .

返回:A direct-tcpip paramiko.channel.Channel 如果 gateway 是一个 Connection ;或 ProxyCommand 如果 gateway 是一个字符串。

2.0 新版功能.

port = None

要连接的网络端口。

put(*args, **kwargs)

将远程文件(或类似文件的对象)放入远程文件系统。

只是一个包装 Transfer.put . 有关详细信息,请参阅其文档。

2.0 新版功能.

run(command, **kwargs)

在此连接的远程端执行shell命令。

此方法包装了支持ssh的 invoke.runners.Runner.run ;有关详细信息,请参阅其文档。

警告

结构偏离调用的默认设置/行为的地方有几个;它们记录在 Config.global_defaults .

2.0 新版功能.

sftp()

返回A SFTPClient 对象。

如果调用不止一次,则记忆第一个结果;因此,任何给定的 Connection 实例将只具有一个sftp客户机和状态(例如由 chdir )将被保存。

2.0 新版功能.

ssh_config = None

每个主机的ssh配置数据(如果有)。(见 装载和使用 ssh_config 文件夹

sudo(command, **kwargs)

执行shell命令,通过 sudo ,在远端。

此方法与 invoke.context.Context.sudo 从各个方面来说,除了这个——比如 run --除了通用/全局配置覆盖之外,它还支持每个主机/每个连接配置覆盖。因此,例如,可以配置每个主机的sudo密码。

2.0 新版功能.

transport = None

返回值的便利句柄 self.client.get_transport() .

user = None

此连接将用于连接到远程端的用户名。